假设使用Binding发生以下数据流:
PropertyA <--> DependencyProperty <--> PropertyB
TwoWay
绑定模式。PropertyA
和PropertyB
类都会在更改时在其setter访问器中实现INotifyPropertyChanged
并调用OnPropertyChanged
方法。绑定编译器设置从上面的流程左侧开始,这意味着最后一个绑定集位于DependencyProperty
和PropertyB
之间。
问题是当PropertyA
通知属性发生变化时,DependencyProperty
不会调用她的OnPropertyChangedCallback
方法。
相反,当PropertyB
通知属性发生变化时,DependencyProperty
会调用她的OnPropertyChangedCallback
方法。
我想知道是否有可能使用.NET Binding机制实现此类行为,或者还有其他方法。
提前致谢。
更新
例如,问题上下文中的术语“链”意味着:
当PropertyA
通知更改时,PropertyB
将通知DependencyProperty
通知PropertyA
更改,反之亦然。
以上示例使用PropertyA
在PropertyB
到DependencyProperty
之间“链接”。
答案 0 :(得分:2)
您 在同一DependencyProperty
作为目标时,不能有两个绑定。
这意味着您有两个相同DependencyProperty
的来源。
但是 你可以拥有一个属性 (在Model或ViewModel上)作为许多依赖属性的 源 。 这很常见。
如果只有在一个属性发生变化时才调用OnPropertyChangedCallback
,这对我来说似乎很正常。
只能有一个来源,最后一个绑定胜出。
这是一个包含架构的漂亮页面:http://blog.scottlogic.com/2012/04/05/everything-you-wanted-to-know-about-databinding-in-wpf-silverlight-and-wp7-part-one.html
修改强>
如果要同时拥有两个对象的两个属性,可以使用ViewModel作为A持有PropB和持有PropB的B之间的中介。
所以你有: | &LT; - &GT; ClassA.PropA 查看&lt; ---&gt; ViewModel.Prop- | | &LT; - &GT; ClassB.PropB
这意味着: - ViewModel Object将注册到ClassA和ClassB的PropertyEventChanged 如果ClassA或ClassB将为PropA或PropB更改引发事件,ViewModel将引发事件。
当调用ViewModel Prop.set时,ViewModel会调用ClassA.PropA.set和ClassB.PropB.set。
获取ViewModel时,只会读取ClassA.PropA。但这并不重要,因为PropA和PropB的价值相同。
希望它有所帮助,问候
此致