在介紹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 替代即可。本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。