Data binding for TextBox

112,425

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.
Share:
112,425
Joan Venge
Author by

Joan Venge

Professional hitman.

Updated on July 17, 2020

Comments

  • Joan Venge
    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.