2010-10-29 18 views
13

El ejemplo de esto sería:En WPF, ¿cómo obtener el enlace de un elemento específico del código?

Un cuadro de texto está limitado a algunos datos. Hay un segundo cuadro de texto que no está vinculado a nada. Por lo tanto, quiero vincular el cuadro de texto 2 a los mismos datos. 1st textBox está vinculado.

En otras palabras, ¿quiero saber si el objeto DependencyObject almacena alguna referencia a sus enlaces de datos? Si no, ¿cuál es la forma de descubrir todos los enlaces de datos de un objeto específico?

Respuesta

31

Prueba este

Xaml

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

entonces podemos establecer la unión de la TextProperty para textBox2 a los mismos que textBox1 con este código detrás

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

¡Gracias! ¡Eso es lo que he estado buscando! – Vitalij

+0

¿Qué hacer si tengo propiedades anidadas como 'TranslateTransform.XProperty'? – pt12lol

+1

¿Por qué tiene que ser 'bindingExpression.ParentBinding'? – j00hi

0

Puede hacer esto en código llamando al método SetBinding.

+0

sé cómo enlace de conjunto no sé cómo conseguir la referencia a una unión existente. – Vitalij

+0

He buscado en DependencyObject, no contiene ninguna referencia al origen de enlace, por lo que quiero saber de dónde puedo obtener esta referencia. – Vitalij

+0

GetBinding() :) –

3

Usted puede conseguir la unión de cualquier objeto de dependencia usando

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

continuación, establezca la unión con

System.Windows.FrameworkElement.SetBinding(DependencyProperty dp, string path) 

Por ejemplo:

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