代码之家  ›  专栏  ›  技术社区  ›  Joan Venge

文本框的数据绑定

  •  28
  • Joan Venge  · 技术社区  · 15 年前

    我有一个基本属性来存储一个水果类型的对象:

    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.textBox.Text = "NewFruit" ,它不更新这个。食物。

    为什么会这样?我也实施了 INotifyPropertyChanged 水果。名字,但还是一样。

    4 回复  |  直到 7 年前
        1
  •  57
  •   RubberDuck    9 年前

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

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

    那会解决问题的。

    注意,默认 DataSourceUpdateMode OnValidation ,所以如果不指定 OnPropertyChanged ,在验证发生之前,不会更新模型对象。

        2
  •  1
  •   Peter Mortensen icecrime    10 年前

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

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

    阅读bindingsource和的简单数据绑定 Windows Forms .

        3
  •  0
  •   Alex78191 Rawand Deheliah    7 年前

    我们可以使用以下代码

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

    在哪里?

    • "Text" _“文本框属性”
    • model “模型对象在此处输入代码
    • "Name" _“绑定文本框的模型的值。
        4
  •  -2
  •   Hasani Blackwell    15 年前

    不能将数据绑定到属性,然后将值显式地分配给数据绑定属性。