在WPF中如何从代码中获取特定项的绑定?

时间:2010-10-29 11:29:40

标签: c# wpf data-binding

这样的例子是:

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

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

4 个答案:

答案 0 :(得分:40)

试试这个

的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);

答案 1 :(得分:7)

您可以使用

获取任何依赖项对象的绑定
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);

答案 2 :(得分:1)

我知道已经有一个可以接受的答案,但是出于某些原因您只是不这样做?

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

现在,无论绑定到什么textBox1,即使绑定发生更改,textBox2也是如此,不需要任何代码隐藏。

当然,我是根据所提供的XAML来设计的,您很可能需要将代码本身绑定到其他东西,但是如果没有,上面的方法就可以了。

答案 3 :(得分:0)

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