INotifyDataErrorInfo 实体级验证.如何引发验证错误事件
本文关键字:验证 错误 事件 何引发 INotifyDataErrorInfo 实体 | 更新日期: 2023-09-27 18:30:32
我有以下问题:
我正在使用 INotifyDataErrorInfo 验证来验证我的模型。现在我需要在"实体级别"验证我的模型,因此应该验证模型对象的整个状态。
这一切都有效,验证规则返回错误,但现在如何确保为我的模型引发 Validation.Error 事件,以便我可以在 MainWindow 级别捕获它以显示错误消息?
对于我的属性,我用 xaml 编写以下内容,以便引发 Validation.Error 事件:
<TextBox Text="{Binding PropertyName, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" />
如果有人能为我提供一个工作示例,我会很高兴,谢谢!
@ninja 刺猬:是的,我知道,但问题在于也为模型级错误获取事件。
但是现在我找到了解决问题的方法。
如果要为整个模型提供 Validation.Error 事件,则必须在父控件上绑定例如 DataContext。下面的例子将解释我的意思:
<Grid DataContext="{Binding ., ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}">
<TextBox Text="{Binding PropertyName, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" />
<TextBox Text="{Binding PropertyName1, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" />
<TextBox Text="{Binding PropertyName2, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" />
</Grid>
因此,网格上 DataContext 的绑定现在侦听模型的 INotifyDataErrorInfo.ErrorsChanged 事件,如果出现错误,则会为整个模型引发 Validation.Error RoutedEvent。
Event
Validation.Error 是一个 RoutedEvent,一旦验证在绑定中返回 false,它就会引发。
<StackPanel Validation.Error="OnError">
<TextBox Text="{Binding PropertyName, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" />
</StackPanel>
在 MainWindow 的代码隐藏中,您将需要这样的东西:
public void OnError(object sender, ....)
{
....
}