在WPFvalidation中ValidatesOnNotifyDataErrors和ValidatesOnDataErrors和NotifyOnValidationError有什么区别?
在WPFvalidation中 ,以下是什么区别:
ValidatesOnNotifyDataErrors = True
ValidatesOnDataErrors = True
NotifyOnValidationError = True
什么时候应该在XAML中正确使用这些属性?
当您希望XAML绑定控件基于ViewModel / Model中实现的接口validation其input时,使用ValidatesOnNotifyDataErrors
和ValidatesOnDataErrors
,对于接口为INotifyDataErrorInfo
的ValidatesOnDataErrors
和为IDataErrorInfo
ValidatesOnDataErrors
。
例如,假设您有一个像这样的视图模型:
class PersonViewModel : IDataErrorInfo { public string FirstName {get; set;} string IDataErrorInfo.Error { return string.Empty; } string IDataErrorInfo.this[string columnName] { if (columnName == "FirstName" &&) { if (this.FirstName.Length > 20) return "FirstName can't be more than 20 characters."; } return string.Empty; } }
然后在你的视图中,你有一个绑定到FirstName属性的文本框,如下所示: <TextBox Text={Binding Path=FirstName, ValidatesOnDataErrors=True} />
现在,如果用户在文本框中input了20个或更多字符,被检测到。
另一方面,当您想要在绑定失败validation时引发事件时,使用NotifyOnValidationError
。
我通常在我的XAML控件中使用ValidatesOnDataErrors
进行validation,而且我还没有其他两个需要,所以这取决于您的情况。
编辑:我正在更新我的答案,因为我已经学到了一些新的东西,所以我需要使这更相关。
ValidatesOnDataErrors
用于胖客户端,换句话说,当在客户端执行validation(如桌面WPF或WinForm应用程序)时,模型对象实现IDataErrorInfo
。
另一方面, ValidatesOnNotifyDataErrors
将更适合于在服务器上进行validation的瘦客户端(多层应用程序),例如客户端 – 服务器应用程序(Silverlight,带有WCF的WPF等) 。
这样,当用户在TextBox中键入某些东西时,该值将被asynchronous发送到服务器以进行validation,并且当validation结果返回时会引发一个事件( ErrorsChanged事件是确切的) ,然后视图会select并显示它使用适当的方法,当然在这种情况下,模型会实现INotifyDataErrorInfo
。
我希望它能帮助你:
ValidateOnNotifyDataErrors
ValidateOnDataErrors
NotifyOnValidationError