Enlace de datos para TextBox

Tengo una propiedad básica que almacena un objeto de tipo Fruta:

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 establecí esto. this.Food fuera del formulario y luego aparece en la interfaz de usuario.

Si this.Food esto. this.Food , se actualiza correctamente. Si modifico la interfaz de usuario mediante progtwigción, como:

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

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

Recomiendo que implemente INotifyPropertyChanged y cambie su código de enlace de datos a este:

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

Eso lo arreglará.

Tenga en cuenta que el DataSourceUpdateMode predeterminado 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.

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(); 

Lea sobre BindingSource y enlace de datos simple para Windows Forms .

Podemos usar el siguiente código

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

Dónde

  • "Text" – la propiedad del cuadro de texto
  • model – el objeto modelo ingresa el código aquí
  • "Name" : el valor del modelo que vincula el cuadro de texto.

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