如何使用 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 绑定模式。 PropertyAPropertyB 类都实现了 INotifyPropertyChanged 并在更改时在其 setter 访问器中调用 OnPropertyChanged 方法。

绑定编译器设置从上述流程的左侧到右侧开始,即最后一个绑定设置在DependencyPropertyPropertyB之间。

问题是当PropertyA 通知属性更改时,DependencyProperty 没有调用她的OnPropertyChangedCallback 方法。

相反,当PropertyB 通知属性更改时,DependencyProperty 会调用她的OnPropertyChangedCallback 方法。

我想知道是否有可能使用 .NET 绑定机制来实现这种行为,或者还有其他方法。

提前致谢。

更新

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

PropertyA 通知更改时,PropertyB 将收到来自DependencyProperty 的通知,PropertyA 通知更改,反之亦然。

上面的例子“链”在PropertyAPropertyB 之间使用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