集合对象的数据绑定(2)
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。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。