这里有一篇非常好的文章正好解决了这个问题——我使用了这种方法,效果很好。
基本思想是使用附加属性——称为“ValidationScope.Errors”——将视图的验证范围绑定到视图模型中的属性。
这是引用自链接文章的代码:
公共类 ValidationScope
{
公共静态 IList GetErrors(DependencyObject obj)
{
返回 (IList)obj.GetValue(ErrorsProperty);
}
公共静态无效 SetErrors(DependencyObject obj,IList 值)
{
obj.SetValue(错误属性,值);
}
公共静态只读 DependencyProperty ErrorsProperty =
DependencyProperty.RegisterAttached("错误", typeof(IList), typeof(ValidationScope),
新的 PropertyMetadata(null, ErrorsChanged));
公共静态无效错误更改(DependencyObject obj,DependencyPropertyChangedEventArgs args)
{
FrameworkElement 元素 = (FrameworkElement)obj;
element.BindingValidationError += 委托(对象发送者,ValidationErrorEventArgs e)
{
如果(e.Action == ValidationErrorEventAction.Added)
{
GetErrors(obj).Add(e.Error);
}
别的
{
GetErrors(obj).Remove(e.Error);
}
};
}
}
您可以通过侦听框架的BindingValidationError
事件并将错误添加/删除到您指定的视图模型目标来查看此附加依赖项属性的工作原理。要在代码中使用它,只需将依赖属性绑定ValidationScope.Errors
到视图模型中的目标属性:
<my:SomeUserControl my:ValidationScope.Errors="{Binding MyViewModel.Errors}" />
现在您的视图模型包含一个属性“错误”,您可以使用它来检查视图是否实际有效。