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然后它出现在UI中。

如果我修改this.Food ,它会正确更新。 如果我以编程方式修改UI,如:

this.textBox.Text = "NewFruit" ,它没有更新this.Food。

为什么会这样? 我还为Fruit.Name实现了INotifyPropertyChanged ,但仍然相同。

我建议您实现INotifyPropertyChanged并将您的数据绑定代码更改为:

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

那就解决了。

请注意,默认的DataSourceUpdateModeOnValidation ,因此如果您未指定OnPropertyChanged ,则在您的validation发生之后才会更新模型对象。

您需要一个bindingsource对象作为中介并协助绑定。 然后,不是更新用户界面,而是更新下划线模型。

 var model = (Fruit) bindingSource1.DataSource; model.FruitType = "oranges"; bindingSource.ResetBindings(); 

阅读BindingSource和Windows Forms的简单数据绑定。

我们可以使用以下代码

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

哪里

  • "Text" – 文本框的属性
  • model – 模型对象在此处输入代码
  • "Name" – 绑定文本框的模型的值。

您不能数据绑定到属性,然后明确地为数据绑定属性赋值。