我是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")
然后它可以正常工作。
有关第一个代码示例无效的原因的任何解释都将不胜感激。
答案 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窗体数据绑定中使用的业务对象上实现此接口。实现后,接口将通过绑定控件与业务对象上的属性进行更改。