Binding,顾名思义,即为绑定。在WPF中被封装成一个类,其相当于数据的桥梁,两端分别是Binding的源和目标。
下面用一个简单的例子来说明Binding的用法。
首先,新建一个名为Student的类,作为数据源
Binding是一种自动机制,当值变化后属性要有能力通知Binding,让Binding把变化传递给UI元素。要是属性具有这种通知变化的能力,方法
是在属性set语句中激发一个PeopertyChanged事件。这个事件不需要我们声明,我们要做的是让类继承System.ComponentModel命名空间的
INotifyPropertyChanged接口,这样当Name属性的值发生变化时,PropertyChanged事件就会被激发
一般情况下,很多控件比如TextBox都把BindingOperations.SetBinding进行了封装,封装成了诸如TextBox.SetBinding等形式的成员函数
上面的
BindingOperations.SetBinding(this.textBox,TextBox.TextProperty,binding);
也可换成
textBox.SetBinding(TextBox.TextProperty,binding);
下面用一个简单的例子来说明Binding的用法。
首先,新建一个名为Student的类,作为数据源
<pre name="code" class="csharp">class Student
{
private string name;
public string Name
{
get{return name;}
set{name=value;}
}
}
Binding是一种自动机制,当值变化后属性要有能力通知Binding,让Binding把变化传递给UI元素。要是属性具有这种通知变化的能力,方法
是在属性set语句中激发一个PeopertyChanged事件。这个事件不需要我们声明,我们要做的是让类继承System.ComponentModel命名空间的
INotifyPropertyChanged接口,这样当Name属性的值发生变化时,PropertyChanged事件就会被激发
class Student:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string name;
public string Name
{
get { return name; }
set
{
name = value;
//激发事件
if (this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
}
}
}
}
然后,在UI上新建一个TextBox,Name为textBox,我们通过下面的代码将一个Student对象绑定到TextBox上,这样在TextBox就可以显示学生名字
public MainWindow()
{
InitializeComponent();
//准备数据源
Student stu=new Student();
//准备Binding
Binding binding=new Binding();
binding.Source=stu;
binding.Path=new PropertyPath("Name");
//使用Binding连接数据源与Binding目标
BindingOperations.SetBinding(this.textBox,TextBox.TextProperty,binding);
}
一般情况下,很多控件比如TextBox都把BindingOperations.SetBinding进行了封装,封装成了诸如TextBox.SetBinding等形式的成员函数
上面的
BindingOperations.SetBinding(this.textBox,TextBox.TextProperty,binding);
也可换成
textBox.SetBinding(TextBox.TextProperty,binding);