1

我有以下问题:

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

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

对于我的属性,我在 xaml 中编写了以下内容,因此引发了 Validation.Error 事件:

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

如果有人可以为我提供一个工作示例,我将非常高兴,谢谢!

4

2 回答 2

3

@ninjahedgehog:是的,我知道,但问题是也要获得模型级错误的事件。

但现在我找到了解决问题的方法。

如果您想为整个模型设置 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>

因此,Grid 上 DataContext 的绑定现在侦听模型的 INotifyDataErrorInfo.ErrorsChanged 事件,如果出现错误,则为整个模型引发 Validation.Error RoutedEvent。

于 2013-09-06T06:30:52.343 回答
1

Event Validation.Error 是一个 RoutedEvent,一旦您的验证在绑定中返回 false,它总是会引发。

<StackPanel Validation.Error="OnError">
  <TextBox Text="{Binding PropertyName, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" />
</StackPanel>

在 MainWindow 后面的代码中,您将需要以下内容:

public void OnError(object sender, ....)
{
 ....
}
于 2013-09-06T06:22:32.827 回答