如何在WPF ViewModel中使用模型验证规则

我正在使用WPF和MVVM模式,并开始一个非常大的项目。

为了保持关注点分开,我想将所有验证规则放入我的数据模型中。

但是当我回顾如何进行WPF验证时,我可以找到的所有示例都显示了如何使用包含验证规则的ViewModel进行验证。 其中的一些例子显示了对WPF的深刻理解,并且非常酷。

在这个特定的应用程序中,我在编辑和模型的ViewModels之间建立了1:1映射,所以我可以将它放在ViewModels中。 但它感觉不对。


使用IDataErrorInfo验证(如果这是您正在使用的)将在View上绑定的对象上发生。

所以如果你有

<TextBox Text="{Binding Name}" />

这将在ViewModel上。 但是,如果您将模型作为视图模型的属性公开,那么将在数据模型上进行验证。

<TextBox Text="{Binding Model.Name}" />

通过第一种选择,您可以绑定到视图模型属性并路由到包含实际验证的数据模型,然后在视图模型上实现IDataErrorInfo并将验证路由到模型

视图模型:

public string this[string propname]
{
     get { return _model[propname]; }
}

只有在模型上实际设置了所需的属性以使验证生效时,这才有用

视图模型:

public string SomeProperty
{
     get { reutrn _model.SomeProperty; }
     set {
           _model.OtherProperty = value; 
           RaisePropertyChanged("SomeProperty");
         }
}

不过,我更喜欢第二个绑定选项,因为问题在于它不是非常干燥,所以我几乎总是将DataModel公开为视图模型的属性(因为它负责数据)并让ViewModel管理该视图的模型更多地涉及UI如何与数据交互。

在非常复杂的场景中,将验证与模型和视图模型分开并让视图模型和数据模型都使用它们可能会更好。

链接地址: http://www.djcxy.com/p/3429.html

上一篇: How to Use Model Validation Rules in WPF ViewModel

下一篇: time weaving for signed jars