我有以下问题:
我正在使用INotifyDataErrorInfo验证来验证我的模型。 现在我需要在“实体级”上验证我的模型,以便验证模型对象的整个状态。
这一切都正常,验证规则会返回错误,但我现在如何确保为我的模型引发Validation.Error事件,以便在MainWindow-Level中捕获它以显示错误消息?
对于我的属性,我在xaml中编写以下内容,以便引发Validation.Error事件:
<TextBox Text="{Binding PropertyName, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" />
如果有人可以为我提供一个工作示例,我会很高兴,谢谢!
答案 0 :(得分:2)
@ninja hedgehog:是的,我知道,但问题是获得模型级错误的事件。
但现在我找到了解决问题的方法。
如果要为整个Model提供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的Binding现在会侦听Model的INotifyDataErrorInfo.ErrorsChanged事件,如果出现错误,则会为整个模型引发Validation.Error RoutedEvent。
答案 1 :(得分: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, ....)
{
....
}