gpt4 book ai didi

wpf - WPF 验证中的 ValidatesOnNotifyDataErrors 与 ValidatesOnDataErrors 和 NotifyOnValidationError 之间有什么区别?

转载 作者:行者123 更新时间:2023-12-02 04:53:18 30 4
gpt4 key购买 nike

WPF验证中,以下内容有什么区别:

ValidatesOnNotifyDataErrors = True

ValidatesOnDataErrors = True

NotifyOnValidationError = True

什么时候应该在 XAML 中正确使用这些属性?

最佳答案

ValidatesOnNotifyDataErrorsValidatesOnDataErrors当您希望 XAML 绑定(bind)控件根据 ViewModel/Model 中实现的接口(interface)验证其输入时使用,例如 ValidatesOnNotifyDataErrors该接口(interface)是 INotifyDataErrorInfo ValidatesOnDataErrors它是 IDataErrorInfo .
例如,假设您有一个如下所示的 View 模型:

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;
}

}

然后在您的 View 中您有一个绑定(bind)到 FirstName 属性的文本框,如下所示: <TextBox Text={Binding Path=FirstName, ValidatesOnDataErrors=True} />现在,如果用户在文本框中输入 20 个或更多字符,则会检测到错误。

另一方面NotifyOnValidationError当您希望在绑定(bind)验证失败时引发事件时使用。

我通常使用ValidatesOnDataErrors在我的 XAML 控件中进行验证,我不需要其他两个,所以这取决于您的情况。

编辑:我正在更新我的答案,因为我学到了一些新东西,所以我需要使其更相关。

ValidatesOnDataErrors用于胖客户端,或者换句话说,当在客户端(例如桌面 WPF 或 WinForm 应用程序)执行验证时,并且模型对象实现 IDataErrorInfo .

另一方面,ValidatesOnNotifyDataErrors更适合瘦客户端(多层应用程序),例如进行验证的客户端-服务器应用程序(Silverlight、带有 WCF 的 WPF 等..)在服务器上。

这样,当用户在文本框中键入某些内容时,该值就会异步发送到服务器进行验证,并且当验证结果返回时,会引发一个事件(确切地说是 ErrorsChanged 事件),然后 View 会选择它并使用适当的方法显示它,当然在这种情况下模型将实现 INotifyDataErrorInfo .

关于wpf - WPF 验证中的 ValidatesOnNotifyDataErrors 与 ValidatesOnDataErrors 和 NotifyOnValidationError 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17254847/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com