huo*_*125 5 c# validation wpf mvvm inotifydataerrorinfo
INotifyDataErrorInfo 内部只有 3 个内容:
\n\nHasErrors:一个只读布尔属性,用于判断对象作为一个整体是否存在任何验证错误;
\n GetErrors:返回给定属性的验证错误的方法;
\nErrorsChanged:当检测到新错误 \xe2\x80\x93 或缺少错误 \xe2\x80\x93 时必须引发的事件。您必须为每个属性引发此事件。
在演示项目中,我创建了一个表单,它显示名为 的对象的属性\xe2\x80\x98Person\xe2\x80\x99。以下是如何在绑定中启用 INotifyDataErrorInfo 验证:
<TextBox Text="{Binding Name,Mode=TwoWay,ValidatesOnNotifyDataErrors=True}"/>\nRun Code Online (Sandbox Code Playgroud)\n\n我们必须将该ValidatesOnNotifyDataErrors属性设置为true。
然后,绑定将自行注册绑定的 Person 的 ErrorsChanged 事件。每次为绑定属性引发此事件时,控件都会自行调整以显示错误。仅当 HasErrors 设置为 true 时才会执行此操作。
\n\n问题:
\n\nErrorsChanged event is raised for\n the binded property, the controls will dress itself to display an\n error?如果我绑定Address.Country,Person是否会为ErrorsChanged绑定的属性引发事件?Address.Country为什么?有没有办法让这个绑定也显示错误?
<TextBox Text="{Binding Address.Country,Mode=TwoWay,ValidatesOnNotifyDataErrors=True}"/>
小智 4
我想我可以冒险回答一下,这个问题已经一年了。
绑定将注册到ErrorsChanged包含该属性的类中的事件。在这种情况下,Address 必须实现INotifyDataErrorInfo.
并且,由您ErrorsChanged在实现验证逻辑时引发事件。验证 Address.Country 后,您可以存储 ValidationResults(或简单字符串列表)并引发事件。GetErrors(string propertyName)Binding 将通过调用您自己编写的实现 INotifyDataErrorInfo 接口的方法来获取他所绑定的 PropertyName 的存储的 ValidationResults 列表。
如果此列表不为空,则绑定会将属性设置Validation.HasError为 True,并且控件将引发Validation.Error事件。某些控件具有内置行为,可以在错误情况下更改其外观(文本框的边框周围将有一个红框)。如果要显示错误,则必须通过在 xaml 中编写样式来检索它们。那里有很多例子。
HasErrors如果您想知道 Person 的属性中是否有任何错误,请使用该方法。它主要用于这种情况:启用或禁用保存按钮。再次,由您使用HasErrors属性来实现逻辑。它主要是通过将其绑定到 xaml 中的控件属性来完成的。
| 归档时间: |
|
| 查看次数: |
3708 次 |
| 最近记录: |