Data binding for TextBox
Solution 1
I Recommend you implement INotifyPropertyChanged and change your databinding code to this:
this.textBox.DataBindings.Add("Text",
this.Food,
"Name",
false,
DataSourceUpdateMode.OnPropertyChanged);
That'll fix it.
Note that the default DataSourceUpdateMode
is OnValidation
, so if you don't specify OnPropertyChanged
, the model object won't be updated until after your validations have occurred.
Solution 2
You need a bindingsource object to act as an intermediary and assist in the binding. Then instead of updating the user interface, update the underlining model.
var model = (Fruit) bindingSource1.DataSource;
model.FruitType = "oranges";
bindingSource.ResetBindings();
Read up on BindingSource and simple data binding for Windows Forms.
Solution 3
We can use following code
textBox1.DataBindings.Add("Text", model, "Name", false, DataSourceUpdateMode.OnPropertyChanged);
Where
-
"Text"
– the property of textbox -
model
– the model object enter code here -
"Name"
– the value of model which to bind the textbox.
Comments
-
Joan Venge almost 4 years
I have a basic property that stores an object of type Fruit:
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"); }
So I set
this.Food
outside the form and then it shows up in the UI.If I modify
this.Food
, it updates correctly. If I modify the UI programmatically like:this.textBox.Text = "NewFruit"
, it doesn't update this.Food.Why could this be? I also implemented
INotifyPropertyChanged
for Fruit.Name, but still the same.