【发布时间】:2020-01-23 13:56:53
【问题描述】:
我有一个看起来像这样的绑定:
<MyControl SomeProperty="{Binding VmProperty.SubProperty.SubSubProperty.Name, ValidatesOnDataErrors=True}" />
路上的每个班级都实现了IDataErrorInfo,但是目前,只有我的最后一个班级对名称进行了真正的检查:
public string this[string propertyName]
{
get
{
if (propertyName == nameof(Name))
{
if(someCheck){
return "oh oh";
}
}
return string.Empty;
}
}
public string Error{
get{
return this[nameof(Name)];
}
}
现在我将值更改为不正确的值,我得到了什么:
- 我最后一个子模型上的
this[string propertyName]被正确调用并返回错误 - 我的视图模型上的
this[string propertyName]未被调用(其他级别均未调用) - 控件周围不显示红色方块(如果我直接绑定到我的 VM 的本地属性,它会显示。
所以我的理解是:
-
IDataErrorInfo错误不会冒泡到绑定 - 我的视图模型的
IDataErrorInfo实现未被调用,因为它不知道子子子子属性已更新。
你应该如何处理这个问题?无论是在子子子属性更改时通知的方式(任何级别都可以更改,因此我注册每个级别的每个PropertyChanged 事件将非常麻烦),或者冒泡错误?
【问题讨论】:
标签: wpf xaml binding idataerrorinfo