我正在尝试理解Silverlight依赖属性系统的低级细节。
我意识到DependencyObject没有显式的DataContext属性,甚至没有父级的概念。
然而,派生类派生自DependencyObject,绑定使用它附加的DataContext作为绑定源自身。
我的问题是:我可以从DependencyObject派生一个类,并以某种方式确定在Source中使用哪个其他对象进行绑定?或者更清楚:如何实现类似行为的东西?
答案 0 :(得分:2)
DataContext是一个FrameworkElement属性。通过使用一种形式 父子属性继承,绑定系统可以解析一个 存在于父元素上的DataContext,即使是子对象 (具有target属性)不是FrameworkElement和 因此不保存自己的DataContext值。但是,那 父元素必须是FrameworkElement才能设置和保存 DataContext的。或者,您必须定义绑定 可以使用null DataContext。
和
从Silverlight 4开始,目标也可以是 在以下情况下DependencyObject的DependencyProperty:
DependencyObject是FrameworkElement属性的值。
DependencyObject位于一个集合中,该集合是a的值 FrameworkElement属性(例如,Resources属性)。
DependencyObject位于DependencyObjectCollection中。
从Silverlight 5开始,目标也可以是Value属性 风格中的二传手。有关示例,请参阅Style类 概述
所以问题的答案是:是的,您可以从DependencyObject派生您的类,只要满足上面列出的条件或绑定不依赖于DataContext(使用的ElementName或Source属性),它的依赖属性上的绑定就会起作用