天天看點

WPF快速指導3:資料綁定

WPF快速指導3:資料綁定 

本文摘要:

1:實體類的綁定;

2:實體類集合的綁定及DataTemplate;

3:自定義的實體類集合,如ObservableDictionary; 

4:Path的文法;

1:實體類的綁定

         了解WPF資料綁定,首先需要了解接口INotifyCollectionChanged。

         場景1:UI顯示學生資訊,當學生姓名發生改變的時候,就需要實時地表現到UI上。在這種情況下,就需要Student這個類實作INotifyCollectionChanged接口。如下:

         可以看到,實體類Student需要實作的INotifyPropertyChanged 接口成員為:public event PropertyChangedEventHandler PropertyChanged。當我們在WPF的UI控件中實作綁定的時候,UI會自動為PropertyChanged指派(為UI的控件對象的OnPropertyChanged)。其次,需要在屬性SET方法中實作調用委托變量PropertyChanged,即如上代碼片段中的Notify。

         設計一個前台界面:

         此界面對應背景檔案:

      以上全部代碼實作了場景1,同時,我們還會發現,如果在UI中修改了student的FirstName或者LastName。則背景代碼中的student對象的屬性會自動同步變化。

2:實體類集合的綁定及DataTemplate

         既然對于單個實體類的資料綁定已經實作,那麼有沒有辦法對清單資料,也就是實體類集合進行資料的綁定呢?.NET提供了INotifyCollectionChanged,任何實作了該接口的集合類,都可以用來滿足如下場景。

         場景2:UI顯示學生清單資訊。在背景增加或删除學生,或修改清單中單個學生的資訊,在前台都能同步顯示。同時,前台修改資料,也能同步反應到綁定源中。

         在場景2的代碼中,使用了ObservableCollection集合類,這個類就是實作了INotifyCollectionChanged接口的一個集合類。

         前台代碼:

         對應的背景代碼:

         以上代碼片段,實作了場景2的所有功能。在《快速指導2中》提到的DataTemplate的作用也展現出來了。可以看到,在背景代碼中,并沒有為ListBox指定任何資料源,為何ListBox仍舊可以自動綁定資料?在WPF中,如果一個控件為綁定資料源,則會自動到父控件中去找,比如,本示例中,ListBox便會自動綁定dockPanel的資料源。而兩個TextBox,則是綁定集合類中的實體類的相關屬性。其預設綁定的是索引為0的元素。

         ListBox的屬性IsSynchronizedWithCurrentItem="True"表示,如果集合類中的實體屬性在背景發生變化,則ListBox将會在UI中動态顯示變化。      

3:自定義的實體類集合,如ObservableDictionary

         在上文中提到了提供了,任何實作了INotifyCollectionChanged接口的集合類,都可以用來實作場景2。結果我們用到.NET提供的ObservableCollection集合類。在實際的應用中,會常常用到字典集合類,而.NET卻沒有提供。這就需要我們自己來實作一個ObservableDictionary。以下是該類的下載下傳位址:

4:Path的文法

     使用 Path 屬性可以指定您要綁定到的源值:

在最簡單的情況下,Path 屬性值是要用于綁定的源對象的屬性名,如 Path=PropertyName。

通過類似于 C# 中使用的文法,可以指定屬性的子屬性。例如,子句 Path=ShoppingCart.Order 設定與對象或屬性 ShoppingCart 的 Order 子屬性的綁定。

可以在要應用索引器的屬性名後面的方括号内指定屬性的索引器。例如,子句 Path=ShoppingCart[0] 将綁定設定為與屬性的内部索引處理文本字元串“0”的方式對應的索引。此外,還支援多個索引器。

可以在 Path 子句中混合索引器和子屬性;例如,Path=ShoppingCart.ShippingInfo[MailingAddress,Street].

在索引器内部,您可以有多個由逗号 (,) 分隔的索引器參數。可以使用圓括号指定每個參數的類型。例如,您可以有 Path="[(sys:Int32)42,(sys:Int32)24]",其中 sys 映射到 System 命名空間。

如果源為集合視圖,則可以用斜杠 (/) 指定目前項。例如,子句 Path=/ 用于設定到視圖中目前項的綁定。如果源為集合,則此文法指定預設集合視圖的目前項。

可以結合使用屬性名和斜杠來周遊作為集合的屬性。例如,Path=/Offices/ManagerName 指定源集合的目前項,該源集合包含也作為集合的 Offices 屬性。其目前項是一個包含 ManagerName 屬性的對象。

也可以使用句點 (.) 路徑綁定到目前源。例如,Text=”{Binding}” 等效于 Text=”{Binding Path=.}”。

練習:

用WPF實作如下的功能

   1:有3個員工,每個員工有自己的姓名和年齡等屬性;

   2:WPF頁面用清單顯示3個員工詳細資訊;

   3:選中清單中的一項,能在頁面的下方顯示目前選中員工的詳細資訊,同時這些詳細資訊又是可修改的,修改完畢後,清單中該員工的資訊能動态更新。

本文轉自最課程陸敏技部落格園部落格,原文連結:http://www.cnblogs.com/luminji/archive/2011/01/22/1941855.html,如需轉載請自行聯系原作者