数据窗口中的 Catel 取消按钮
Catel Cancel button in DataWindow
然后我修改 "ProductName" 并按下 "Cancel" 按钮 属性 重置为传递的参数。但是,如果我修改 ProgramIds(添加或删除)并按 "Cancel" 按钮集合未设置为通过。为什么?
我在 ViewModel 中有:
[Model]
[Catel.Fody.Expose("ProductName")]
[Catel.Fody.Expose("ProgramIds")]
Public ProgramDataModel DataModel
{
get { return GetValue<ProgramDataModel>(DataModelProperty); }
set { SetValue(DataModelProperty, value); }
}
模型中:
public string ProductName
{
get { return GetValue<string>(ProductNameProperty); }
set { SetValue(ProductNameProperty, value); }
}
public static readonly PropertyData ProductNameProperty = RegisterProperty(nameof(ProductName), typeof(string));
public ObservableCollection<ProgramIDModel> ProgramIds
{
get { return GetValue<ObservableCollection<ProgramIDModel>>(ProgramIdsProperty); }
set { SetValue(ProgramIdsProperty, value); }
}
public static readonly PropertyData ProgramIdsProperty = RegisterProperty(nameof(ProgramIds), typeof(ObservableCollection<ProgramIDModel>));
在 MainViewModel 中:
var viewModel = new ProductWindowViewModel(DataViewModel);
await _uiVisualizerService.ShowDialogAsync(viewModel);
Catel 使用 IEditableObject
来恢复用户点击取消时的状态。因为您使用的是 ID 集合,Catel 在重置集合时可能会遇到一些问题。
报告此问题(带重现)
作为目前的解决方法,您可以重写 CancelAsync
方法并自行恢复集合。 或 作为替代方案,您可以在 VM 中使用克隆的集合,并且仅替换 SaveAsync
.
中的项目
遇到与 ObservableCollection
完全相同的问题,只需将 [Serializable]
属性添加到模型 class
即可解决
[Serializable]
public class ProgramDataModel:ValidatableModelBase
{
}
然后我修改 "ProductName" 并按下 "Cancel" 按钮 属性 重置为传递的参数。但是,如果我修改 ProgramIds(添加或删除)并按 "Cancel" 按钮集合未设置为通过。为什么?
我在 ViewModel 中有:
[Model]
[Catel.Fody.Expose("ProductName")]
[Catel.Fody.Expose("ProgramIds")]
Public ProgramDataModel DataModel
{
get { return GetValue<ProgramDataModel>(DataModelProperty); }
set { SetValue(DataModelProperty, value); }
}
模型中:
public string ProductName
{
get { return GetValue<string>(ProductNameProperty); }
set { SetValue(ProductNameProperty, value); }
}
public static readonly PropertyData ProductNameProperty = RegisterProperty(nameof(ProductName), typeof(string));
public ObservableCollection<ProgramIDModel> ProgramIds
{
get { return GetValue<ObservableCollection<ProgramIDModel>>(ProgramIdsProperty); }
set { SetValue(ProgramIdsProperty, value); }
}
public static readonly PropertyData ProgramIdsProperty = RegisterProperty(nameof(ProgramIds), typeof(ObservableCollection<ProgramIDModel>));
在 MainViewModel 中:
var viewModel = new ProductWindowViewModel(DataViewModel);
await _uiVisualizerService.ShowDialogAsync(viewModel);
Catel 使用 IEditableObject
来恢复用户点击取消时的状态。因为您使用的是 ID 集合,Catel 在重置集合时可能会遇到一些问题。
作为目前的解决方法,您可以重写 CancelAsync
方法并自行恢复集合。 或 作为替代方案,您可以在 VM 中使用克隆的集合,并且仅替换 SaveAsync
.
遇到与 ObservableCollection
完全相同的问题,只需将 [Serializable]
属性添加到模型 class
[Serializable]
public class ProgramDataModel:ValidatableModelBase
{
}