如何使用Binding with Dependency Property链接属性

时间:2015-11-12 18:45:43

标签: c# wpf xaml data-binding dependency-properties

假设使用Binding发生以下数据流:

PropertyA <--> DependencyProperty <--> PropertyB
  • &lt; - &gt;标记表示TwoWay绑定模式。
  • PropertyAPropertyB类都会在更改时在其setter访问器中实现INotifyPropertyChanged并调用OnPropertyChanged方法。

绑定编译器设置从上面的流程左侧开始,这意味着最后一个绑定集位于DependencyPropertyPropertyB之间。

问题是当PropertyA通知属性发生变化时,DependencyProperty不会调用她的OnPropertyChangedCallback方法。

相反,当PropertyB通知属性发生变化时,DependencyProperty会调用她的OnPropertyChangedCallback方法。

我想知道是否有可能使用.NET Binding机制实现此类行为,或者还有其他方法。

提前致谢。

更新

例如,问题上下文中的术语“链”意味着:

PropertyA通知更改时,PropertyB将通知DependencyProperty通知PropertyA更改,反之亦然。

以上示例使用PropertyAPropertyBDependencyProperty之间“链接”。

1 个答案:

答案 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的价值相同。

希望它有所帮助,问候

此致