kuh*_*yan 48 validation wpf xaml
在WPF验证中,有以下几点之间的区别:
ValidatesOnNotifyDataErrors = True
ValidatesOnDataErrors = True
NotifyOnValidationError = True
什么时候应该在XAML中正确使用这些属性?
Ibr*_*jar 53
ValidatesOnNotifyDataErrors而ValidatesOnDataErrors当你想要一个XAML绑定控件基于视图模型/型号实现的接口来验证它的输入,使用ValidatesOnNotifyDataErrors该接口是INotifyDataErrorInfo和ValidatesOnDataErrors它IDataErrorInfo.
例如,假设您有一个这样的视图模型:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中,您有一个绑定到FirstName属性的文本框,如下所示:
<TextBox Text={Binding Path=FirstName, ValidatesOnDataErrors=True} />
现在,如果用户在文本框中输入了20个字符或更多字符,则会检测到错误.
另一方面NotifyOnValidationError,当您希望在绑定验证失败时引发事件时使用.
我通常ValidatesOnDataErrors在我的XAML控件中使用进行验证,而我不需要其他两个,所以这取决于你的情况.
编辑:我正在更新我的答案,因为我已经学到了一些新的东西,所以我需要让它更具相关性.
ValidatesOnDataErrors用于胖客户端,或者换句话说,在客户端执行验证时,例如桌面WPF或WinForm应用程序和模型对象实现IDataErrorInfo.
另一方面,ValidatesOnNotifyDataErrors更适合瘦客户端(多层应用程序),例如客户端 - 服务器应用程序(Silverlight,带有WCF的WPF等),其中验证发生在服务器上.
这样,当用户在TextBox中键入某些内容时,该值将异步发送到服务器以进行验证,并且当验证结果返回时会引发事件(确切地说是ErrorsChanged事件),然后视图将其选中并显示它使用适当的方法,当然在这种情况下模型将实现INotifyDataErrorInfo.
仅供您参考:IDataErrorInfo.ErrorWPF 中未使用,可以返回 null 或抛出NotImplementedException.
WinForms 中使用了此属性。
就我个人而言,我更喜欢使用INotifyDataErrorInfo它,因为它允许将多个错误消息映射到单个属性。
| 归档时间: |
|
| 查看次数: |
19997 次 |
| 最近记录: |