然后我修改" ProductName"然后按"取消"按钮属性重置为传递参数。但是,如果我修改ProgramIds(添加或删除)并按"取消"按钮集合没有设置传递。为什么呢?
我在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);
答案 0 :(得分:0)
Catel使用IEditableObject
来恢复用户点击取消时的状态。因为您正在使用一组ID,所以Catel可能会在重置集合时遇到一些问题。
请在official issue tracker报告此问题(使用repro)。
作为现在的解决方法,您可以覆盖CancelAsync
方法并自行恢复其中的集合。 或作为替代方案,您可以在VM中使用克隆集合,仅替换SaveAsync
中的项目。