c# - INotifyDataErrorInfo。 ErrorsChanged 如何使 wpf 显示属性错误,如 `Address.Country`

标签 c# wpf validation mvvm inotifydataerrorinfo

INotifyDataErrorInfo 里面只有 3 个东西:

HasErrors : 一个只读的 bool 属性,它告诉整个对象是否有任何验证错误;
GetErrors : 返回给定属性的验证错误的方法;
ErrorsChanged :当检测到新错误或没有错误时必须引发的事件。您必须为每个属性引发此事件。


在演示项目中,我创建了一个表单来显示名为 ‘Person’ 的对象的属性。 .以下是如何在绑定(bind)中启用 INotifyDataErrorInfo 验证:

<TextBox Text="{Binding Name,Mode=TwoWay,ValidatesOnNotifyDataErrors=True}"/>

我们必须设置 ValidatesOnNotifyDataErrors属性(property)true .

然后绑定(bind)将为绑定(bind)的 Person 的 ErrorsChanged 事件注册自己。每次为绑定(bind)属性引发此事件时,控件都会 self 装饰以显示错误。仅当 HasErrors 设置为 true 时才会执行此操作。


问题:

  1. 有没有人知道关于 ErrorsChanged event is raised for the binded property, the controls will dress itself to display an error 的更多细节? ?
  2. 如果我绑定(bind)Address.CountryPerson ,将ErrorsChanged为绑定(bind)属性引发事件 Address.Country或不?为什么?有没有办法让这个绑定(bind)也显示错误?

    <TextBox Text="{Binding Address.Country,Mode=TwoWay,ValidatesOnNotifyDataErrors=True}"/>

最佳答案

我想我可以冒险回答,这个问题已经一年了。

绑定(bind)将注册到包含该属性的类中的 ErrorsChanged 事件。在这种情况下,Address 必须实现 INotifyDataErrorInfo

而且,是您在实现验证逻辑时引发 ErrorsChanged 事件。一旦您验证了 Address.Country,您就可以存储 ValidationResults(或简单的字符串列表)并引发事件。 Binding 将通过调用您自己编写的实现 INotifyDataErrorInfo 接口(interface)的方法 GetErrors(string propertyName) 来获取他绑定(bind)到的 PropertyName 的存储 ValidationResults 列表。

如果此列表不为空,Binding 会将属性 Validation.HasError 设置为 True,并且控件将引发 Validation.Error 事件。某些控件具有在错误情况下更改其外观的内置行为(文本框的边框周围将有一个红色框)。如果要显示错误,则必须通过在 xaml 中编写样式来检索它们。那里有很多例子。

HasErrors 方法用于了解 Person 的属性是否有任何错误。它主要用于这种情况:启用或禁用保存按钮。再一次,您需要使用 HasErrors 属性来实现逻辑。这主要是通过将其绑定(bind)到 xaml 中的控件属性来完成的。

关于c# - INotifyDataErrorInfo。 ErrorsChanged 如何使 wpf 显示属性错误,如 `Address.Country`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28082340/

相关文章:

c# - 在 System.Windows.Controls.Image 控件中显示 System.Drawing.Bitmap 对象

c# - 通过吞掉异常将 WPF 文本框限制为整数

c# - Task.Run 需要很长时间才能启动任务

validation - 提交死亡白页

javascript - 验证隐藏的输入字段

c# - CORS:对预检请求的响应未通过访问控制检查:它没有 HTTP 正常状态

格式为 dd.MM.yyyy 的 c# SQL 查询错误

c# - 为什么出现错误 X.509 证书中不存在私钥

c# - 从操作中获取方法名称

javascript - asp.net mvc 中的客户端验证