获取Binding的父级

本文关键字:Binding 获取 | 更新日期: 2023-09-27 18:01:12

我有一个Binding对象,我想知道这个Binding的父对象。

示例:

<Label Name="BindingLabel" Content="{Binding Path=LabelText}"/>

在示例中,Binding的父级是名称为"BindingLabel"的Label,我搜索方法仅从Binding对象中获取它。

谢谢!

获取Binding的父级

一个Binding可以用于多个对象,因此它不能有一个Parent。如果你知道你正在查看哪些对象(例如,你已经有了一个列表,或者你可以遍历一棵树(以及要检查哪些依赖属性,你就可以检查元素是否使用了该绑定。

以下是如果您有使用的Binding的确切实例:,您可以如何做到这一点

Binding binding = // whatever (must be the same instance used in the object)
IEnumerable<Label> labels = // whatever
foreach (var label in labels)
{
    if (label.GetBindingExpression(Label.ContentProperty).ParentBinding
        == binding)
    {
        // found it!
    }
}

或者你只是想比较一下路径:

var path = "LabelText";
IEnumerable<Label> labels = // whatever
foreach (var label in labels)
{
    if (label.GetBindingExpression(Label.ContentProperty).ParentBinding.Path.Path
        == path)
    {
        // found it!
    }
}

你的问题有点模糊,因为你没有描述你打算用它做什么。如果你想设置标签的特定属性,你可以使用valueconverter。此外,您可以通过在(多(绑定中使用RelativeSource=Self来传递对对象本身的引用

<Label> 
   <Label.Content> 
      <MultiBinding Converter="{StaticResource MyConverter}"> 
          <MultiBinding.Bindings> 
             <Binding Path="LabelText" /> 
             <Binding RelativeSource="{RelativeSource Self}"/> 
          </MultiBinding.Bindings> 
       </MultiBinding> 
   </Label.Content> 
</Label> 

我没有测试代码,所以我可能会放弃绑定声明之类的东西。