Связывание данных для TextBox

У меня есть основное свойство, которое хранит объект типа 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");
}

Итак, я устанавливаю this.Food вне формы, а затем появляется в пользовательском интерфейсе.

Если я изменяю this.Food, он корректно обновляется. Если я модифицирую пользовательский интерфейс программно, например:

this.textBox.Text = "NewFruit", он не обновляет этот файл .Food.

Почему это может быть? Я также реализовал INotifyPropertyChanged для Fruit.Name, но все тот же.

Ответ 1

Я рекомендую вам внедрить INotifyPropertyChanged и изменить код привязки данных к этому:

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

Это исправит.

Обратите внимание, что значение по умолчанию DataSourceUpdateMode равно OnValidation, поэтому, если вы не укажете OnPropertyChanged, объект модели не будет обновляться до тех пор, пока не произойдут ваши проверки.

Ответ 2

Вам нужен объект bindingsource, чтобы действовать как посредник и помогать в привязке. Затем вместо обновления пользовательского интерфейса обновите модель подчеркивания.

var model = (Fruit) bindingSource1.DataSource;

model.FruitType = "oranges";

bindingSource.ResetBindings();

Прочитайте BindingSource и простую привязку данных для Windows Forms.

Ответ 3

Мы можем использовать следующий код

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

Где

  • "Text" - свойство текстового поля
  • model - объект модели вводит код здесь
  • "Name" - значение модели, которая связывает текстовое поле.

Ответ 4

Вы не можете привязать данные к свойству и затем явно назначить значение для свойства databound.