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);
那就解决了。
请注意,默认的DataSourceUpdateMode
是OnValidation
,因此如果您未指定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"
– 绑定文本框的模型的值。
您不能数据绑定到属性,然后明确地为数据绑定属性赋值。