1 什么可以作为绑定源:
A .特定的属性 B.指定为集合 C .ObjectDataProvider D .XmlDataProvider E 等
2 DependencyObject
在WPF中,软件开发人员所常接触的大部分类型都派生自DependencyObject,因此派生自DependencyObject的类型非常适合在UI层中作为绑定源。DependencyObject。该类默认提供了对绑定的支持。软件开发人员可以在该类型的派生类中使用DependencyProperty.Register()等众多函数实现可绑定属性。但由于并不是所有的WPF类型都派生自DependencyObject,而且DependencyObject上的所有属性并不全是DependencyProperty,因此在使用一个类型及属性之前,软件开发人员需要检查该类型是否派生自DependencyObject,而该属性是否在该类型中拥有相应的DependencyProperty。
WPF只是一个UI 类库,而如果软件需要绑定使用非UI层的属性,那么从DependencyObject类派生并不是一个好的选择。正确的做法则是从INotifyPropertyChanged接口派生。实现了该接口后,类型实例可作为绑定源使用。
做法一: DependencyObject的继承
A.Register()等函数注册一个static readonly的DependencyProperty
B.GetValue()以及SetValue()
做法二:实现INotifyPropertyChanged接口
A 声明PropertyChanged事件。绑定将侦听该事件并在事件发出后执行。
B 由于基类中的事件只能用来添加及删除侦听函数,因此软件开发人员需要提供一个派生类可访问的包装函数,以允许派生类发出PropertyChanged事件。该包装函数一般被命名为NotifyPropertyChanged(),并常常接受一个string类型的参数。
C 实现相应属性。在属性的访问符实现中,软件开发人员需要在属性的实际值发生更改后调用NotifyPropertyChanged()。