INotifyDataErrorInfo 实体级验证.如何引发验证错误事件

本文关键字:验证 错误 事件 何引发 INotifyDataErrorInfo 实体 | 更新日期: 2023-09-27 18:30:32

我有以下问题:

我正在使用 INotifyDataErrorInfo 验证来验证我的模型。现在我需要在"实体级别"验证我的模型,因此应该验证模型对象的整个状态。

这一切都有效,验证规则返回错误,但现在如何确保为我的模型引发 Validation.Error 事件,以便我可以在 MainWindow 级别捕获它以显示错误消息?

对于我的属性,我用 xaml 编写以下内容,以便引发 Validation.Error 事件:

<TextBox Text="{Binding PropertyName, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" />

如果有人能为我提供一个工作示例,我会很高兴,谢谢!

INotifyDataErrorInfo 实体级验证.如何引发验证错误事件

@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, ....)
{
 ....
}