如何使用 Binding with Dependency Property 链接属性
Posted
技术标签:
【中文标题】如何使用 Binding with Dependency Property 链接属性【英文标题】:How to chain properties using Binding with Dependency Property 【发布时间】:2015-11-12 18:45:42 【问题描述】:假设使用绑定发生以下数据流:
PropertyA <--> DependencyProperty <--> PropertyB
标记代表TwoWay
绑定模式。
PropertyA
和 PropertyB
类都实现了 INotifyPropertyChanged
并在更改时在其 setter 访问器中调用 OnPropertyChanged
方法。
绑定编译器设置从上述流程的左侧到右侧开始,即最后一个绑定设置在DependencyProperty
和PropertyB
之间。
问题是当PropertyA
通知属性更改时,DependencyProperty
没有调用她的OnPropertyChangedCallback
方法。
相反,当PropertyB
通知属性更改时,DependencyProperty
会调用她的OnPropertyChangedCallback
方法。
我想知道是否有可能使用 .NET 绑定机制来实现这种行为,或者还有其他方法。
提前致谢。
更新
例如,问题上下文中的术语“链”意味着:
当PropertyA
通知更改时,PropertyB
将收到来自DependencyProperty
的通知,PropertyA
通知更改,反之亦然。
上面的例子“链”在PropertyA
到PropertyB
之间使用DependencyProperty
。
【问题讨论】:
阅读你的标题:你想实现某种连接吗? Emmanuel DURIN 谢谢你的回答,是的,我愿意(“……或者还有其他方法。”)。 这在你的问题中真的看不到 - 或者我错过了一些东西 - 你想连接 PropA 和 PropB 吗? - 他们是字符串吗?或者您是否希望 A 或 B 发生任何更改来更改 dep。道具(会有奇怪的副作用)? Emmanuel DURIN 为了清楚起见,我更新了问题。 【参考方案1】:您不能在作为目标的同一个DependencyProperty
上有两个绑定。
这意味着您将有两个相同DependencyProperty
的来源。
但是你可以有一个属性(在模型或视图模型上)作为许多依赖属性的来源。 这很常见。
如果您仅在更改一个属性时调用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 和 B 持有 PropB 之间的中介。
所以你有: | ClassA.PropA 查看 ViewModel.Prop-| | ClassB.PropB
意思是: - ViewModel 对象将注册到 ClassA 和 ClassB 的 PropertyEventChanged。 如果 ClassA 或 ClassB 会引发 PropA 或 PropB 更改的事件,ViewModel 会引发事件。
ViewModel 会在调用 ViewModel Prop.set 时调用 ClassA.PropA.set 和 ClassB.PropB.set。
获取 ViewModel 时,只会读取 ClassA.PropA。但这没关系,因为 PropA 和 PropB 的价值相同。
希望对你有帮助,问候
问候
【讨论】:
感谢您的回答,请为您的回答分配一个链接,以便我知道它基于语言规范或某些可靠来源。 是否双向都无所谓。单个依赖属性不能同时成为两个 Binding 的目标。这个问题没有意义。 @Eido,我没有找到任何措辞,dep.prop 只有一个来源。最接近的可靠来源是 Clemens(46K 声誉)。但它不能与 dep.property 的两个源一起使用。这意味着 dep.prop 可以同时被两个具有两个不同值的属性赋值 @Eido。我做了一个编辑。也许我明白什么可以帮助你。有时间请看一下。以上是关于如何使用 Binding with Dependency Property 链接属性的主要内容,如果未能解决你的问题,请参考以下文章
Select2 with ajax, multiple and knockout binding 不将对象保存到 selectedOptions
CXF: No binding operation info while invoking unknown method with params unknown.
Duplex or request-reply with Apache ActiveMQ WCF Binding 配置问题
Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 12.x
[Vue +TS] Use Two-Way Binding in Vue Using @Model Decorator with TypeScript
C# 调用soap接口时 No binding operation info while invoking unknown method with params unknown