【问题标题】:Bind a readonly DependencyProperty to another readonly DependencyProperty将一个只读的 DependencyProperty 绑定到另一个只读的 DependencyProperty
【发布时间】:2011-09-03 10:19:15
【问题描述】:

我有一个包含只读 DependencyProperty 的类。从这个类中,我想将只读DependencyProperty 绑定到另一个类的另一个只读DepenendencyProperty(从代码创建绑定)。

有没有可能做到这一点? SetBinding() 似乎没有将DependencyPropertyKey 作为参数的重载? BindingOperations-class 似乎都没有提供这样的功能。

问题也可以表述为:如果我有DependencyPropertyKey,我可以为只读DependencyProperty 创建绑定吗?

【问题讨论】:

  • 这应该如何工作?如果双方都是只读的,那么无论如何 OneWay 都不应该工作,不是吗?
  • @H.B.不,因为我有只读 DependencyProperty(DependencyPropertyKey)的键,所以从我的班级的角度来看,它不是只读的。仅限于课外。类似于 CLR-Property 的私有设置器 - 它可以从类内部访问,但对于其他类,它是只读属性。 msdn.microsoft.com/en-us/library/…
  • 我明白了;不知何故,我怀疑它是否可以完成,您可以轻松注册属性更改回调并手动设置值。
  • @H.B.我也怀疑,但也许有人知道方法。 PropertyChangedCallback 并不是一个真正的选项,因为它位于问题的另一端。我可以使用 DependencyPropertyDescriptor.AddValueChanged 来做到这一点,但据我所知,如果我不取消注册,这会很快导致内存泄漏,并且如果可能的话,我想避免这种取消注册代码。它使代码更容易出错。
  • @Alex Maker:不是只读的 DP?在这种情况下,只读状态的优势就丧失了。还是我误解了你的建议?

标签: wpf data-binding dependency-properties


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    可以尝试实现私有 RW 依赖属性,将原始 RO 绑定到它,然后在 RW 的回调中修改公开的 RO。但这听起来像一个黑客。还有更好的选择吗?

    【讨论】:

      猜你喜欢
      • 2020-11-23
      • 2011-01-06
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 2012-06-06
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多