【问题标题】:In WPF how to get binding of a specific item from the code?在 WPF 中如何从代码中获取特定项目的绑定?
【发布时间】:2010-10-29 11:29:40
【问题描述】:

这个例子是:

文本框绑定到一些数据。还有第二个文本框不绑定到任何东西。所以我想将文本框 2 绑定到第一个文本框绑定的相同数据。

换句话说,我不知道 DependencyObject 是否存储了一些对其数据绑定的引用?如果不是,如何找出特定对象的所有数据绑定?

【问题讨论】:

    标签: c# wpf data-binding


    【解决方案1】:

    试试这个

    Xaml

    <TextBox Name="textBox1" Text="{Binding Text1}"/>
    <TextBox Name="textBox2" Text="No Binding"/>
    

    然后我们可以将textBox2的TextProperty的绑定设置为与textBox1相同,后面有这段代码

    BindingExpression bindingExpression = textBox1.GetBindingExpression(TextBox.TextProperty);
    Binding parentBinding = bindingExpression.ParentBinding;
    textBox2.SetBinding(TextBox.TextProperty, parentBinding);
    

    【讨论】:

    • 谢谢!这就是我一直在寻找的!
    • 如果有TranslateTransform.XProperty等嵌套属性怎么办?
    • 为什么一定要bindingExpression.ParentBinding
    【解决方案2】:

    你可以使用任何依赖对象的绑定来获取

    System.Windows.Data.BindingOperations.GetBinding(DependencyObject target,DependencyProperty dp)
    

    然后用

    设置绑定
    System.Windows.FrameworkElement.SetBinding(DependencyProperty dp, string path)
    

    例如:

    var binding = BindingOperations.GetBinding(textBox1,TextBox.TextProperty);
    textBox2.SetBinding(TextBox.TextProperty, binding);
    

    【讨论】:

    • 我相信这是一个比公认的更好的答案,因为它不需要解构绑定表达式。在这里,您可以直接看到绑定本身。
    【解决方案3】:

    我知道已经有一个被接受的答案,但是你不这样做有什么原因吗?

    <TextBox Name="textBox1" Text="{Binding Text1}"/>
    <TextBox Name="textBox2" Text="{Binding Text, ElementName=textBox1}"/>
    

    现在无论textBox1 绑定到什么,即使该绑定发生变化,textBox2 也是如此,无需代码隐藏。

    当然,我是基于所提供的 XAML,您很可能需要代码中的绑定本身来处理其他内容,但如果不需要,上述方法就可以了。

    【讨论】:

      【解决方案4】:

      您可以通过调用SetBinding 方法在代码中执行此操作。

      【讨论】:

      • 我知道如何设置绑定我不知道如何获取对现有绑定的引用。
      • 我查看了 DependencyObject,它不包含对绑定源的任何引用,所以我想知道从哪里可以得到这个引用。
      • 请提供更多信息或示例如何实现这一目标
      • 上面@Felipe Faria 的回答提供了一些例子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多