前几天刚看完WPF的数据绑定,但是真正开始写项目的时候却不知道该怎么用了,现在在拿来复习一下
数据对象是指计划在用户界面上显示的信息包,只要由公有属性组成, 不支持字段和私有属性 ,任何类都可以使用,此外如果希望使用这个对象进行修改(双向绑定)。属性不能是只读的。
public class Product
{
private string modelNumber
public string ModelNumber
{
get { return modelNumber; }
set { modelNumber=value ;}
}
}
创建一个Product对象的一个实例,然后将它绑到控件上 。。。。
双向绑定,当文本框中的值发生变化的时候
1.将每个属性该为依赖项属性,Product类必须继承自DependencyObject类,尽管这种方法可以让WPF自动执行相应的工作,但是最合理的做法是将其应用与元素-----在窗口中具有可视化外观的类。
2、可以为每一个属性引发一个事件,对于这种情况,事件必须以propertyNameChanged的形式进行命名,如(UnitCostChanged),当属性发生变化时候,由您引发这个事件
3.可以实现System.CommandModel.INotifyPropertyChanged接口,该接口需要一个名为PropertyChanged的事件,无论何时属性发生变化都必须引发 PropertyChanged事件,并且通过将属性名称作为字符串提供来指示哪个属性发生了变化
第一种方法依赖于WPF的依赖项属性基础架构,而第二种和第三种方法依赖于事件,通常,当创建数据对象时,会使用第三种方法,对于非元素类而言,这是最简单的选择
下面重新规划Product类的定义,现在Product类使用了INotifyPropertyChanged接口,并添加了实现PropertyChanged事件的代码
public class Product :INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e )
{
if (PropertyChanged != null)
PropertyChanged(this ,e);
}
}
现在只需要在所有属性设置器中引发PropertyChanged事件即可。
private decimal unitCost
public decimal UniCost
{
get { return unitCost;}
set {unitCost =value;
OnPropertyChanged(new PropertyChangedEventArgs("UnitCost"));
}
如果上面的示例中使用新版本的Product类,将会得到所期望的行为,当改变当前Product对象时,会立即在文本框中显示新信息