嵌套验证未更新子VM更改

时间:2015-06-15 07:56:06

标签: c# catel

我有一个带有一些嵌套模型的场景,我想对它进行验证。

由于我的UI正在使用MVVM实现拖放行为,并且我不想将该逻辑放在模型中,因此我的某些模型类中有一个VM。

例如SiteConfiguration有一个名为SiteConfigurationViewModel的虚拟机。

在这种情况下,SiteConfigurationViewModel具有公开模型的SiteConfiguration类型的属性。

根VM包含顶级VM列表,视图(DataWindow)具有一些绑定以显示VM实例的列表(ListView)以及用户可以编辑的选定实例

我正在尝试实现验证,但是当我更改嵌套VM / Model中的值时,顶部窗口错误不会更新。

我尝试了很多变体(例如验证注释,覆盖ValidateFieldsValidateBusinessRulesViewModelToModel属性)但我想我做错了。

1 个答案:

答案 0 :(得分:0)

如果您只向模型添加错误(而不是视图模型),则错误不会自动显示。原因是Catel为您为视图模型添加了WarningAndErrorValidator控件,而不是为模型添加(因为您可能想隐藏一些验证)。请注意,vm完全负责验证。

如果您使用ViewModelToModel映射,Catel也会自动为您映射所有验证(因此您可以在模型上进行验证,将其映射到vm上,vm将自动公开所有映射的警告/错误)。