然后修改"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);发布于 2015-12-06 15:47:20
Catel使用IEditableObject来恢复用户单击cancel时的状态。由于您使用的是ids集合,Catel在重置集合时可能会出现一些问题。
请在官方问题跟踪器上报告此问题(并附上副本)。
作为目前的解决办法,您可以重写CancelAsync方法并自己在那里还原集合。或者,作为替代,您可以在VM中使用一个克隆集合,并且只替换SaveAsync中的项。
发布于 2022-03-14 13:19:43
面对与ObservableCollection完全相同的问题,只需将[Serializable]属性添加到模型类中即可解决。
[Serializable]
public class ProgramDataModel:ValidatableModelBase
{
}https://stackoverflow.com/questions/34119045
复制相似问题