将一个只读的DependencyProperty绑定到另一个只读的DependencyProperty

5
我有一个包含只读DependencyProperty的类。我想从这个类中绑定到另一个类的只读DependencyProperty(从代码中创建绑定)。是否有可能做到这一点?SetBinding()似乎没有接受DependencyPropertyKey作为参数的重载?BindingOperations类也似乎没有提供这样的功能。
该问题也可以表述为:如果我有DependencyPropertyKey,我能否为只读DependencyProperty创建绑定?

1
@H.B. 不,因为我拥有只读 DependencyProperty 的密钥(DependencyPropertyKey),从我的类的角度来看它不是只读的。只有对于类的外部才是只读的。这就像 CLR 属性的私有 setter - 它可以从类的内部访问,但对于其他类来说它是只读属性。http://msdn.microsoft.com/en-us/library/system.windows.dependencypropertykey.aspx - HCL
我明白了,但我还是有些怀疑它是否能够完成。不过你可以轻松地注册一个属性更改回调函数并手动设置值。 - H.B.
1
@H.B. 我也有疑问,但也许有人知道方法。 PropertyChangedCallback 不是一个真正的选项,因为它在问题的另一端。我可以使用 DependencyPropertyDescriptor.AddValueChanged 来实现,但据我所记,如果我不注销,这很快会导致内存泄漏,如果可能的话,我想避免这种注销代码。这使得代码更容易出错。 - HCL
你是否在使用DependencyProperty来处理业务对象?实际上这不是最好的选择,因为它们只适用于GUI对象。 - MikeKulls
1
@Alex Maker:一个非只读的 DP?在这种情况下,只读状态的优势就会丧失。或者我误解了你的建议? - HCL
显示剩余4条评论
2个回答

2

这是不可能的,因为FrameworkElement.SetBinding方法只接受一个DependencyProperty作为它的第一个参数。如果它也能接受DependencyPropertyKey就好了。因为密钥在类外不可见,所以在类外仍然是只读的,但在类内部可以用于绑定。不幸的是,这是不可能的。


0

有关如何实现这个的好建议吗?

可以尝试实现一个私有的RW依赖属性,将原始RO绑定到它上面,在RW的回调中修改暴露的RO。但这听起来像是一种hack方法。还有更好的选择吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接