嵌套验证未在子 VM 更改时更新

本文关键字:更新 VM 验证 嵌套 | 更新日期: 2023-09-27 17:56:18

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

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

例如,SiteConfiguration有一个名为 SiteConfigurationViewModel 的 VM

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

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

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

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

嵌套验证未在子 VM 更改时更新

如果仅向模型(而不是视图模型)添加错误,则错误不会自动显示。这样做的原因是 Catel 为您添加了视图模型的 WarningAndErrorValidator 控件,而不是模型(因为您可能希望隐藏某些验证)。请注意,VM 完全负责验证。

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