Связывание данных для 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.