| 在上一個Post當(dāng)中,我敘述了WPF中的數(shù)據(jù)綁定相關(guān)的一堆理論知識?,F(xiàn)在,我們將對其中的某些方面通過實例做進一步的分析。
 在介紹WPF數(shù)據(jù)綁定源的種類時,第一種就是任意的CLR對象。這里需要注意的是WPF雖然支持任意的CLR對象,但是一個普通的CLR對象類卻不行。我們還需要在CLR對象類上實現(xiàn)一種變化通知機制。 WPF把這種通知機制封裝在了INotifyPropertyChanged接口當(dāng)中。我們的CLR對象類只要實現(xiàn)了這個接口,它就具有了通知客戶的能力,通常是在屬性改變后通知綁定的目標。 下面是一個簡單的例子,實現(xiàn)了一個支持通知功能的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類的區(qū)別在于首先有一個公有的PropertyChangedEventHandler事件類型。然后我們在.NET屬性包裝CameraProp判斷屬性是否發(fā)生了變化,如果是,則用當(dāng)前是屬性名稱字符串“CameraProp”調(diào)用另一個私有函數(shù)NotifyPropertyChanged。由它根據(jù)屬性的名稱構(gòu)造一個PropertyChangedEventArgs對象,并完成對PropertyChanged的調(diào)用。它才是屬性變化時真正應(yīng)該調(diào)用的一個通知事件。最后一點,如果我們需要通知所以的屬性都發(fā)生了變化,則將上面的屬性字符串“CameraProp”用參數(shù)NULL替代即可。 | 
|  |