我正在尝试找出在我的ModelView中从嵌套属性冒泡PropertyChanged事件的最佳方法。假设我的ModelView PersonModelView
具有属性PersonModelView.Address
。 Address
又有一个属性City
。当我在视图中绑定City
时,我会执行{Binding Address.City}
之类的操作。
我的问题是,即使Address
实现INotifyPropertyChanged
,绑定也不会更新,因为它正在PropertyChanged
上处理PersonModelView
,而不是 Address
。我想我有两个选择:(1)更改绑定源(或将DataContext
更改为)Address
属性或(2)更改PersonModelView
句柄{{1}在PropertyChanged
对象上使用Address
等内容重新发送自己的PropertyChanged
。
你们是怎么解决这个问题的? (我在mo使用MVVM light toolkit,但我对任何方法感兴趣)
答案 0 :(得分:8)
如果Address
实现INotifyPropertyChanged
并在其PropertyChanged
属性上正确引发City
个事件,则绑定应注意到它绑定的属性已更改。
答案 1 :(得分:3)
这是一个SO线程,其中包含有关如何冒泡这些通知的解决方案: When nesting properties that implement INotifyPropertyChanged must the parent object propogate changes?
然而,当控件的绑定设置为Address.City时,IIRC WPF可以自动监视INotifyPropertyChanged通知的地址,而PersonViewModel不需要重新广播Address对象的更新通知。
答案 2 :(得分:1)
您的Address
对象是否实施INotifyPropertyChanged
?如果没有,我认为这将解决您所看到的问题。
修改强> 抱歉,您刚刚注意到您在帖子中提到您已尝试过此操作。您是否尝试在PersonViewModel中订阅Address对象的PropertyChanged事件? OnChanged,您可以在Address对象上执行PropertyChanged。
答案 3 :(得分:0)
查看PropertyChangedPropagator,它可以处理嵌套视图模型属性的依赖关系,包括动态可更改的嵌套视图模型: http://www.codeproject.com/Articles/775831/INotifyPropertyChanged-propagator