2009-10-23 8 views
27

que tienen una propiedad básica que almacena un objeto del tipo de fruta:El enlace de datos para el cuadro de texto

Fruit food; 
public Fruit Food 
{ 
    get {return this.food;} 
    set 
    { 
     this.food= value; 
     this.RefreshDataBindings(); 
    } 
} 

public void RefreshDataBindings() 
{ 
    this.textBox.DataBindings.Clear(); 
    this.textBox.DataBindings.Add("Text", this.Food, "Name"); 
} 

Así que me puse this.Food fuera del formulario y luego se muestra en la interfaz de usuario.

Si modifico this.Food, se actualiza correctamente. Si modifico la interfaz de usuario programáticamente como:

this.textBox.Text = "NewFruit", no actualiza esto. Comida.

¿Por qué podría ser esto? También implementé INotifyPropertyChanged para Fruit.Name, pero sigue siendo el mismo.

Respuesta

54

le recomiendo que implementa INotifyPropertyChanged y cambiar su código de enlace de datos a esto:

this.textBox.DataBindings.Add("Text", 
           this.Food, 
           "Name", 
           false, 
           DataSourceUpdateMode.OnPropertyChanged); 

Eso lo arreglo.

Tenga en cuenta que el valor predeterminado DataSourceUpdateMode es OnValidation, por lo que si no especifica OnPropertyChanged, el objeto modelo no se actualizará hasta después de que se hayan producido las validaciones.

+0

Muchas gracias ♥ –

-2

No puede enlazar datos a una propiedad y luego asignar explícitamente un valor a la propiedad de datos.

+0

Gracias, pero ¿por qué no es posible? Pensé que es de 2 maneras? –

+0

Joan, ese es el enlace (mucho mejorado) en WPF. WinForms es relativamente simple. –

+0

Gracias Henk, ¿sabes cómo lograr esto en Winforms? No puedo usar wpf para este proyecto, lamentablemente. –

1

Necesita un objeto bindingsource para actuar como intermediario y ayudar en el enlace. Luego, en lugar de actualizar la interfaz de usuario, actualice el modelo subyacente.

var model = (Fruit) bindingSource1.DataSource; 

model.FruitType = "oranges"; 

bindingSource.ResetBindings(); 

leer sobre vinculantes para Windows Forms de datos simples y BindingSource.

0

Podemos utilizar siguiente código

textBox1.DataBindings.Add("Text", model, "Name", false, DataSourceUpdateMode.OnPropertyChanged); 

Dónde

  • "Text" - la propiedad de cuadro de texto
  • model - el objeto del modelo Introducir código aquí
  • "Name" - el valor de modelo que para enlazar el cuadro de texto.
Cuestiones relacionadas