В WPF как получить привязку конкретного элемента из кода?

Пример этого будет:

TextBox привязан к некоторым данным. Есть второе текстовое поле, которое ни к чему не привязано. Поэтому я хочу связать текстовое поле 2 с теми же данными, что и 1-й текстовый ящик связан.

Другими словами, я не хочу знать, хранит ли DependencyObject какую-либо ссылку на свои привязки данных? Если нет, то как найти все привязки данных конкретного объекта?

4 ответа

Решение

Попробуй это

Xaml

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

Затем мы можем установить привязку TextProperty для textBox2 так же, как textBox1 с этим кодом позади

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

Вы можете получить привязку любого объекта зависимости, используя

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

Я знаю, что уже есть принятый ответ, но есть ли причина, по которой вы просто этого не делаете?

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

Теперь что угодно textBox1 связан, даже если эта привязка изменится, textBox2 Кроме того, нет необходимости в коде позади.

Конечно, я основываю это на XAML, как представлено, и вам вполне может понадобиться сама привязка из кода для чего-то другого, но если нет, то вышеприведенное работает просто отлично.

Вы можете сделать это в коде, вызвав SetBinding метод.

Другие вопросы по тегам