我有一个基本属性,用于存储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
,它会正确更新。如果我以编程方式修改UI,如:
this.textBox.Text = "NewFruit"
,它不会更新this.Food。
为什么会这样?我还为Fruit.Name实现了INotifyPropertyChanged
,但仍然是相同的。
答案 0 :(得分:57)
我建议您实现INotifyPropertyChanged并将您的数据绑定代码更改为:
this.textBox.DataBindings.Add("Text",
this.Food,
"Name",
false,
DataSourceUpdateMode.OnPropertyChanged);
那就解决了。
请注意,默认DataSourceUpdateMode
为OnValidation
,因此,如果您未指定OnPropertyChanged
,则在您的验证发生之后才会更新模型对象。
答案 1 :(得分:1)
您需要一个bindingsource对象作为中介并协助绑定。然后更新下划线模型,而不是更新用户界面。
var model = (Fruit) bindingSource1.DataSource;
model.FruitType = "oranges";
bindingSource.ResetBindings();
阅读B Windows Forms的BindingSource和简单数据绑定。
答案 2 :(得分:0)
我们可以使用以下代码
textBox1.DataBindings.Add("Text", model, "Name", false, DataSourceUpdateMode.OnPropertyChanged);
哪里
"Text"
- 文本框的属性model
- 模型对象在此处输入代码"Name"
- 绑定文本框的模型的值。答案 3 :(得分:-2)
您无法数据绑定到属性,然后明确地为数据绑定属性赋值。