TextBox的数据绑定

时间:2009-10-23 21:30:19

标签: c# .net winforms data-binding

我有一个基本属性,用于存储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,但仍然是相同的。

4 个答案:

答案 0 :(得分:57)

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

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

那就解决了。

请注意,默认DataSourceUpdateModeOnValidation,因此,如果您未指定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)

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