Data binding for TextBox
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.
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.
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.
We can use following code
textBox1.DataBindings.Add("Text", model, "Name", false, DataSourceUpdateMode.OnPropertyChanged);
Where
"Text"
– the property of textboxmodel
– the model object enter code here"Name"
– the value of model which to bind the textbox.
You can't databind to a property and then explictly assign a value to the databound property.
精彩评论