界面两个文本框和一个按钮共三个控件
一个实体类
public class Test
{
public double A { get; set; }
public double B { get; set; }
}
cs代码
int i = 0;
Test test;
private void simpleButton1_Click(object sender, EventArgs e)
{
if (test==null)
{
test = new Test();
textEdit1.DataBindings.Add("EditValue", test, "B");
textEdit2.DataBindings.Add("EditValue", test, "A");
}
test.A = test.B*10;
}
出现问题:当textEdit1值变为1时,单击按钮后,textEdit2的值应变为10。但实际是textEdit1 为1时,单击按钮后 textEdit2值仍为0, textEdit1变为2时,textEdit2变为10;textEdit1变为3时,textEdit2变为20;即textEdit2反应总慢一拍。
原因:当数据源属性即test 的A值发生变化时,没有发出通知给DataBindings
解决办法:继承INotifyPropertyChanged
修改实体类如下:
using System.ComponentModel;
public class Test : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
double a;
double b;
public double A {
get { return this.a; }
set
{
if (value != this.a)
{
this.a = value;
this.RaisePropertyChanged("A");
}
}
}
public double B { get; set; }
private void RaisePropertyChanged(string propertyName)
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}