INotifyDataErrorInfo中只有3件事:
HasErrors
:一个只读布尔属性,它告诉整个对象是否有任何验证错误;
GetErrors
:返回给定属性的验证错误的方法;
ErrorsChanged
:当检测到新错误或缺少错误时必须引发的事件。您必须为每个房产举办此活动。
在演示项目中,我创建了一个表单,显示名为‘Person’
的对象的属性。以下是在Binding中启用INotifyDataErrorInfo验证的方法:
<TextBox Text="{Binding Name,Mode=TwoWay,ValidatesOnNotifyDataErrors=True}"/>
我们必须将ValidatesOnNotifyDataErrors
属性设置为true
。
然后,绑定将为绑定Person的ErrorsChanged事件注册自己。对于绑定属性引发此事件的时间,控件将自行装扮以显示错误。仅当HasErrors设置为true时才会执行此操作。
问题:
ErrorsChanged event is raised for
the binded property, the controls will dress itself to display an
error
的详细信息? 如果我绑定Address.Country
的{{1}},是否会为绑定的属性Person
引发ErrorsChanged
事件?为什么?有没有办法使这个绑定也显示错误?
Address.Country
答案 0 :(得分:1)
我想我可以冒回答,这个问题已经有一年了。
Binding将注册到包含该属性的Class中的ErrorsChanged
事件。在这种情况下,地址必须实现INotifyDataErrorChanged
。
并且,您在实现验证逻辑时提升ErrorsChanged
事件。验证Address.Country后,存储ValidationResults(或简单字符串列表)并引发事件。 Binding将通过调用您自己编写的实现INotifyDataErrorInfo接口的方法GetErrors(string propertyName)
来获取存储的绑定PropertyName的ValidationResults列表。
如果此列表不为空,则Binding会将Property Validation.HasError
设置为True,控件将引发Validation.Error
事件。某些控件具有内置行为,可以在错误情况下更改其外观(TextBox的边框周围会有红框)。如果要显示错误,则必须通过在xaml中编写样式来检索它们。那里有很多例子。
如果您想知道Person在其Properties中是否有任何错误,则使用HasErrors
方法。它主要用于这种情况:启用或禁用保存按钮。再次,您可以使用HasErrors
属性来实现逻辑。它主要通过将其绑定到xaml中的控件属性来完成。