我有一个对象层次结构(对象A,B),每个对象都实现INotifyPropertyChanged
了......
A 有 B 类型的成员,B 有 C 的成员,C 是 bool 类型
当 C 更改时,它的PropertyChanged
事件被触发,但是这不会触发 B 的属性更改事件。因此 A 不会对 B 的变化做出反应。
有没有什么好的方法可以让这个冒泡?
我有一个对象层次结构(对象A,B),每个对象都实现INotifyPropertyChanged
了......
A 有 B 类型的成员,B 有 C 的成员,C 是 bool 类型
当 C 更改时,它的PropertyChanged
事件被触发,但是这不会触发 B 的属性更改事件。因此 A 不会对 B 的变化做出反应。
有没有什么好的方法可以让这个冒泡?
这太棒了——我得花更多时间看看它。谢谢你。
我找到了一个不同的解决方案,但它有点破解。我只是将绑定路径属性设置为嵌套类型。使用我上面的示例,在我的 xaml(它具有对象 A 的 DataContext)中,我将绑定设置为...
{绑定路径=BC}
将事件冒泡肯定更优雅。
这是一个相当简单的解决方案,但您不能只订阅 PropertyChanged 事件并传播调用吗?
例如
MyContainedObject.PropertyChanged += PropertyChangedHandler;
然后在你的处理程序中:
private void PropertyChangedHandler(object sender, PropertyChangedEventArgs e)
{
this.OnPropertyChanged(e.PropertyName);
}
当您的对象具有同名的属性时,这非常有用。如果您有不同名称的属性,您将不得不做更多的工作来在属性值之间进行转换。
private void PropertyChangedHandler(object sender, PropertyChangedEventArgs e)
{
switch(e.PropertyName)
{
case "Property1":
this.OnPropertyChanged("ADifferentProperty1");
break;
case "Property2":
this.OnPropertyChanged("ADifferentProperty2");
break;
default:
this.OnPropertyChanged(e.PropertyName);
break;
}
}