2

我试图了解 Silverlight 依赖属性系统的低级细节。

我意识到 DependencyObject 没有明确的 DataContext 属性,甚至没有父级的概念。

然而,从 DependencyObject 派生的 Behavior 类具有绑定,它使用它所附加的 DataContext 作为自身绑定的 Source。

我的问题是:我可以从 DependencyObject 派生一个类并以某种方式确定要在 Source 处使用哪个其他对象进行绑定吗?或更清楚地说:如何实现类似 Behavior 类的东西?

4

1 回答 1

2

DataContext 是一个 FrameworkElement 属性。通过使用父子属性继承的形式,绑定系统可以解析存在于父元素上的 DataContext,即使子对象(具有目标属性)不是 FrameworkElement,因此不保存自己的 DataContext 值. 但是,该父元素必须是 FrameworkElement 才能设置和保存 DataContext。或者,您必须定义绑定,以便它可以使用 null DataContext。

从 Silverlight 4 开始,在以下情况下,目标也可以是 DependencyObject 的 DependencyProperty:

  • DependencyObject 是 FrameworkElement 的属性值。

  • DependencyObject 位于作为 FrameworkElement 属性(例如,Resources 属性)值的集合中。

  • DependencyObject 位于 DependencyObjectCollection 中。

从 Silverlight 5 开始,目标也可以是 Style 中 Setter 的 Value 属性。例如,请参阅 Style 类概述。

所以你的问题的答案是:是的,你可以从 DependencyObject 派生你的类,只要满足上面列出的条件或绑定不依赖于 DataContext(使用 ElementName 或 Source 属性),它的依赖属性上的绑定就可以工作

于 2012-06-21T21:04:56.363 回答