如何找到绑定到属性的所有目标依赖项属性?

| 例如:
<UserControl>
    <TextBox Text=\"{Binding Path=Foo, Mode=TwoWays}\"/>
    <TextBlock Text=\"{Binding Path=Foo}\"/>
</UserControl>
在代码中,是否可以找到将Foo属性用作源的依赖项属性列表?     
已邀请:
        确实取决于H.B.指出,但是即使在“简单”的情况下,它也将是非常密集的。 在您的示例中,假设您可以使用Bindings,则可以检查Path属性,看看它是否引用了您的\“ Foo \”属性。但是在某些情况下,那是行不通的。例如,诸如“ 1”的绑定。路径可能比单个属性名称复杂得多。 此外,DataContext可以根据您所在的位置而变化。默认情况下,在DataTemplate中定义的元素不会继承其父级数据上下文。因此,如果您有:
<UserControl>
    <ContextControl Content=\"Test\">
        <ContextControl.ContentTemplate>
            <DataTemplate>
                <TextBox Text=\"{Binding Path=Foo, Mode=TwoWay}\"/>
            </DataTemplate>
        </ContextControl.ContentTemplate>
    </ContextControl>
</UserControl>
然后,“ 3”属性将引用字符串“ 4”,而不是您的对象。在绑定中还使用Source,ElementName和RelativeSource属性的情况。 假设您只有一个DataContext并且仅使用单个单词路径,那么您可能会找到大多数(如果不是全部)目标。 首先,您需要遍历视觉树和逻辑树VisualTreeHelper中的每个元素以遍历视觉树。逻辑树会更复杂。 对于每个元素,您都必须遍历定义的每个依赖项属性。为此,您必须对类型为DependencyProperty的公共静态字段使用反射。 接下来,对于每个依赖项属性,您必须调用GetBindingExpression以获取关联的BindingExpression。然后,您可以使用ParentBinding属性获取父绑定。 然后,只需比较路径属性即可。     
        是的,就我所知,您需要使用反射,就性能而言也不是一个好主意。     

要回复问题请先登录注册