文本框和表单标题之间的简单数据绑定

时间:2010-07-08 22:55:42

标签: c# winforms data-binding

我是C#和数据绑定的新手,作为实验,我试图将表单标题文本绑定到属性:

namespace BindTest
{
    public partial class Form1 : Form
    {
        public string TestProp { get { return textBox1.Text; } set { } }

        public Form1()
        {
            InitializeComponent();
            this.DataBindings.Add("Text", this, "TestProp");
        }
    }
}

不幸的是,这不起作用。我怀疑它与不发送事件的属性有关,但我不太了解数据绑定以了解原因。

如果我将标题文本直接绑定到文本框,如下所示:

this.DataBindings.Add("Text", textBox1, "Text")

然后它可以正常工作。

有关第一个代码示例无效的原因的任何解释都将不胜感激。

2 个答案:

答案 0 :(得分:3)

您必须实现INotifyPropertyChanged接口。 尝试以下代码,看看当你从setter中删除 NotifyPropertyChanged(“MyProperty”); 时会发生什么:

private class MyControl : INotifyPropertyChanged
{
    private string _myProperty;
    public string MyProperty
    {
        get
        {
            return _myProperty;
        }
        set
        {
            if (_myProperty != value)
            {
                _myProperty = value;
                // try to remove this line
                NotifyPropertyChanged("MyProperty");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string propertyName)
    {
        if(PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

private MyControl myControl;

public Form1()
{
    myControl = new MyControl();
    InitializeComponent();
    this.DataBindings.Add("Text", myControl, "MyProperty");
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
    myControl.MyProperty = textBox1.Text; 
}

答案 1 :(得分:1)

我认为你需要实现INotifyPropertyChanged接口。您必须在Windows窗体数据绑定中使用的业务对象上实现此接口。实现后,接口将通过绑定控件与业务对象上的属性进行更改。

How to: Implement the INotifyPropertyChanged Interface