我有一个带有一些嵌套模型的场景,我想对它进行验证。
由于我的UI正在使用MVVM实现拖放行为,并且我不想将该逻辑放在模型中,因此我的某些模型类中有一个VM。
例如SiteConfiguration
有一个名为SiteConfigurationViewModel
的虚拟机。
在这种情况下,SiteConfigurationViewModel
具有公开模型的SiteConfiguration
类型的属性。
根VM包含顶级VM列表,视图(DataWindow
)具有一些绑定以显示VM实例的列表(ListView
)以及用户可以编辑的选定实例
我正在尝试实现验证,但是当我更改嵌套VM / Model中的值时,顶部窗口错误不会更新。
我尝试了很多变体(例如验证注释,覆盖ValidateFields
和ValidateBusinessRules
,ViewModelToModel
属性)但我想我做错了。
答案 0 :(得分:0)
如果您只向模型添加错误(而不是视图模型),则错误不会自动显示。原因是Catel为您为视图模型添加了WarningAndErrorValidator控件,而不是为模型添加(因为您可能想隐藏一些验证)。请注意,vm完全负责验证。
如果您使用ViewModelToModel映射,Catel也会自动为您映射所有验证(因此您可以在模型上进行验证,将其映射到vm上,vm将自动公开所有映射的警告/错误)。