В 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, как представлено, и вам вполне может понадобиться сама привязка из кода для чего-то другого, но если нет, то вышеприведенное работает просто отлично.