В WPF как получить привязку конкретного элемента из кода? - PullRequest
21 голосов
/ 29 октября 2010

Примером этого может быть:

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

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

Ответы [ 4 ]

41 голосов
/ 29 октября 2010

Попробуйте это

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);
8 голосов
/ 06 октября 2016

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

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);
1 голос
/ 05 сентября 2018

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

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

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

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

0 голосов
/ 29 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...