在做TextBox的数据绑定练习时,如果ReadOnly没有设为True,那在显示界面上更改TextBox的属性值,更改后的值会传递回被绑定的对象属性。但是如果在后台更改被绑定的对象属性值,前台显示界面上的TextBox属性值并不会自动更新,会一直显示初始绑定的值。要实现在后台更改,前台同步更新显示,被绑定的对象只要实现INotifyPropertyChanged接口,并在封装属性时监听ProPertyChanged就可以达到这种效果。代码如下:C# WinForm
public partial class Form1 : Form
{
Person p1 = new Person();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
p1.Age = 20;
txtAge.DataBindings.Add(new Binding("Text",p1,"Age"));//将属性值绑定到TextBox控件的Text属性
}
private void button1_Click(object sender, EventArgs e)
{
p1.Age++;//点击一次,将Age属性值+1
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show(p1.Age.ToString());//显示p1.Age的值
}
}
public class Person : INotifyPropertyChanged //定义一个实现INotifyPropertyChanged接口的Person类
{
private int age;
/// <summary>
/// 年龄
/// </summary>
public int Age
{
get { return age; }
set
{
age = value;
if (PropertyChanged != null)//监听属性值是否改变
{
PropertyChanged(this, new PropertyChangedEventArgs("Age"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;//在更改属性值时发生
}
前台界面如下: