3、建立主從視圖
對于兩個主從關系的ListBox,容易想到的一種方法是將第二個ListBox的數據源綁定為第一個ListBox的SelectedItem,或者通過第一個ListBox的SelectionChanged事件來設置綁定。
但是,若借助于CollectionViewSource類可能會更方便。
CollectionViewSource是一個集合視圖類,可以根據不同的篩選、排序條件建立同一個集合對象的多個視圖,如同關系數據庫中可以根據不同的篩選排序條件建立同一個數據表的多個視圖一樣。
CollectionViewSource的屬性
(1) Source:源集合對象
(2) View:當前視圖
(1) 新建一個DepartList類,該類構造函數中會創建一個包含兩個部門的部門列表,且各個部門下游若干員工。
C#Code
附帶代碼:
|
public class DepartList: ObservableCollection<Department> { public DepartList() { ObservableCollection<Employee> employee1 = new ObservableCollection<Employee> { new Employee{Number=500,Name="張三",Age=40}, new Employee{Number=501,Name="李四",Age=41}, new Employee{Number=502,Name="王五",Age=42} }; ObservableCollection<Employee> employee2 = new ObservableCollection<Employee> { new Employee{Number=503,Name="周武",Age=40}, new Employee{Number=504,Name="鄭王",Age=41}, new Employee{Number=505,Name="李代",Age=42} }; this.Add(new Department { DepName="技術部",employees=employee1}); this.Add(new Department { DepName="商務部",employees=employee2}); }} |
(2)在新建XAML頁面中添加:xmlns:local="clr-namespace:PhoneApp1"
(3)在新建頁面的phone:PhoneApplicationPage.Resources標記下添加一個頁面級資源定義。
|
<phone:PhoneApplicationPage.Resources> <local:DepartList x:Key="depList"></local:DepartList> <!--DepartList對象的聲明式定義--> <CollectionViewSource x:Key="departView" Source="{StaticResource depList}"></CollectionViewSource> <!--CollectionViewSource對象的定義--> <DataTemplate x:Key="dtEmployees"> <!--員工列表數據模板的定義--> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Number}"></TextBlock> <TextBlock Text="{Binding Name}" ></TextBlock> <TextBlock Text="{Binding Age}" ></TextBlock> <TextBlock Text="{Binding BirthYear}" ></TextBlock> </StackPanel> </DataTemplate> </phone:PhoneApplicationPage.Resources> |
(3) 在XAML下附帶代碼如下:
|
<TextBlock Name="textBlock1" Text="請選擇部門:" /> <ListBox DisplayMemberPath="DepName" ItemsSource="{Binding Source={StaticResource departView}}" Name="listBox1" /> <TextBlock Name="textBlock2" Text="{Binding Path=CurrentItem.DepName,Source={StaticResource departView}}" /> <TextBlock Name="textBlock3" Text="員工列表:" /> <StackPanel Orientation="Horizontal"> <TextBlock Name="textBlock5" Text="工號" /> <TextBlock Name="textBlock4" Text="姓名" /> <TextBlock Name="textBlock6" Text="年齡" /> <TextBlock Name="textBlock7" Text="出生年份" /> </StackPanel> <ListBox ItemsSource="{Binding Source={StaticResource departView},Path=CurrentItem.employees}" ItemTemplate="{StaticResource dtEmployees}" Name="listBox2" /> |
注意:其中兩處的CurrentItem,代表當前綁定源departView的當前選定項。由于CollectionViewSource會自動識別,因此,在實際使用過程中均可省略,即直接寫作employees。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。