Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF ViewModel中使用模型验证规则_C#_Wpf_Validation_Mvvm - Fatal编程技术网

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

C# 如何在WPF ViewModel中使用模型验证规则,c#,wpf,validation,mvvm,C#,Wpf,Validation,Mvvm,我正在使用带有MVVM模式的WPF,并且刚刚开始一个非常大的项目 为了将关注点分开,我想将所有验证规则放入数据模型中 但是当我回顾如何进行WPF验证时,我能找到的所有示例都显示了如何使用持有验证规则的ViewModel进行验证。其中一些示例显示了对WPF的一些真正深入的理解,并且非常酷 在这个特定的应用程序中,我在编辑的ViewModels和模型之间有一个1:1的映射,因此我可以将它放在ViewModels中。但是感觉不太对。使用IDataErrorInfo(如果您正在使用)验证将在绑定到视图的

我正在使用带有MVVM模式的WPF,并且刚刚开始一个非常大的项目

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

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


在这个特定的应用程序中,我在编辑的ViewModels和模型之间有一个1:1的映射,因此我可以将它放在ViewModels中。但是感觉不太对。

使用
IDataErrorInfo
(如果您正在使用)验证将在绑定到视图的对象上发生

所以如果你有

<TextBox Text="{Binding Name}" />
只有在实际设置模型上的必需属性以使验证生效时,这才有用

视图模型:

public string this[string propname]
{
     get { return _model[propname]; }
}
public string SomeProperty
{
     get { reutrn _model.SomeProperty; }
     set {
           _model.OtherProperty = value; 
           RaisePropertyChanged("SomeProperty");
         }
}
然而,我更喜欢第二个绑定选项,因为它的问题是它不是很枯燥,所以我几乎总是将数据模型作为视图模型上的一个属性公开(因为它负责数据),并让视图模型管理视图的模型,这更多的是关于UI如何与数据交互

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

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