技术开发 频道

WPF的数据处理

    在介绍WPF数据绑定源的种类时,第一种就是任意的CLR对象。这里需要注意的是WPF虽然支持任意的CLR对象,但是一个普通的CLR对象类却不行。我们还需要在CLR对象类上实现一种变化通知机制。

    WPF把这种通知机制封装在了INotifyPropertyChanged接口当中。我们的CLR对象类只要实现了这个接口,它就具有了通知客户的能力,通常是在属性改变后通知绑定的目标。

    下面是一个简单的例子,实现了一个支持通知功能的Camera类:

using System; using System.ComponentModel; using System.Windows.Media.Media3D; namespace LYLTEST { public class Camera : INotifyPropertyChanged { private PerspectiveCamera m_Camera; public event PropertyChangedEventHandler PropertyChanged; public Camera() { m_Camera = new PerspectiveCamera(); } private void NotifyPropertyChanged(String info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } public PerspectiveCamera CameraProp { get { return m_Camera; } set { if (value != m_Camera) { this.m_Camera = value; NotifyPropertyChanged("CameraProp"); } } } } }

    这一段代码很简单,首先引入类中使用的INotifyPropertyChanged和PerspectiveCamera需要的名字空间。这里与普通CLR类的区别在于首先有一个公有的PropertyChangedEventHandler事件类型。然后我们在.NET属性包装CameraProp判断属性是否发生了变化,如果是,则用当前是属性名称字符串“CameraProp”调用另一个私有函数NotifyPropertyChanged。由它根据属性的名称构造一个PropertyChangedEventArgs对象,并完成对PropertyChanged的调用。它才是属性变化时真正应该调用的一个通知事件。

    最后一点,如果我们需要通知所以的属性都发生了变化,则将上面的属性字符串“CameraProp”用参数NULL替代即可。

0
相关文章