2011-09-23 18 views
60

Tengo la necesidad de establecer un enlace en el código.¿Cómo establecer un enlace en el Código?

Parece que no puedo hacerlo bien aunque.

Esto es lo que he intentado:

XAML:

<TextBox Name="txtText"></TextBox> 

Código atrás:

Binding myBinding = new Binding("SomeString"); 
myBinding.Source = ViewModel.SomeString; 
myBinding.Mode = BindingMode.TwoWay; 
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
BindingOperations.SetBinding(txtText, TextBox.TextProperty, myBinding); 

modelo de vista:

public string SomeString 
    { 
     get 
     { 
      return someString; 
     } 
     set 
     { 
      someString= value; 
      OnPropertyChanged("SomeString"); 
     } 
    } 

La propiedad no se actualiza cuando configurarlo.

¿Qué estoy haciendo mal?

Respuesta

127

Prueba esto:

Binding myBinding = new Binding(); 
myBinding.Source = ViewModel; 
myBinding.Path = new PropertyPath("SomeString"); 
myBinding.Mode = BindingMode.TwoWay; 
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
BindingOperations.SetBinding(txtText, TextBox.TextProperty, myBinding); 

Si especifica path (como se hace en el constructor), su fuente debe ser sólo ViewModel, la parte .SomeString se evalúa a partir de la trayectoria.

+7

También es posible usar txtText.SetBinding (TextBox.TextProperty, Mybinding) en lugar de la última línea sólo para reducir escribiendo :) –

+1

@ManishDubey El beneficio de el método estático es que el primer parámetro se define como DependencyObject, por lo que habilita el enlace de datos en objetos que no se derivan de FrameworkElement o FrameworkContentElement (como Freezables). – FreddyFlares

8

necesita cambiar la fuente al modelo de vista del objeto:

myBinding.Source = viewModelObject; 
Cuestiones relacionadas