集合对象的数据绑定
在集合对象的数据绑定中,
(1) 绑定源可以是任意实现了枚举接口的集合类对象
(2) 而绑定目标一般是ItemControl类型的UI元素。
在目前的Windows Phone7中,受支持的ItemControl控件只有一个ListBox。
当然,也可以直接使用ItemControl控件也是可以的。
1、 显示单列数据
原理:ItemControl的两个属性
|
ItemsSource
|
指示绑定源,提供要显示的集合数据,为一个可枚举对象。注意:其绑定结果会受当前数据上下文有关(即上级元素的DataContext属性)。
|
|
DisplayMemberPath
|
指示要绑定的属性名称或路径。默认为空字符串,对应绑定源中元素的ToString()值。
|
(1) 附带Employee.cs代码
|
public class Employee
{
public int Number { get; set; }
public String Name { get; set; }
public String Age { get; set; }
public int BirthYear { get; set; }
}
|
(2) 附带Department.cs代码
|
public class Department:Employee
{
public String DepName { get; set; }//部门名称
public ObservableCollection<Employee> employees { get; set; }//员工列表
}
|
(3) 在C#代码中创建一个部门列表
|
public MainPage()
{
InitializeComponent();
ObservableCollection<Department> departments = new ObservableCollection<Department>
{
new Department{DepName="技术部"},
new Department{DepName="商务部"}
};
lbDepartment.ItemsSource = departments;
}
|
(4) XAML代码中
|
<ListBox Height="257" Name="listBox1" VerticalAlignment="Top">
<ItemsControl Name="lbDepartment" DisplayMemberPath="DepName" ></ItemsControl>
</ListBox>
|
实现效果就是

2、 使用自定义数据模板定制样式
简单的单列数据绑定显然无法满足正常的开发需求。
(1) XAML代码:
|
<StackPanel Height="50" HorizontalAlignment="Center" Name="stackPanel1" Width="480" VerticalAlignment="Top" Orientation="Horizontal">
<TextBlock Name="textBlock1" Text="工号" VerticalAlignment="Top" Width="120" />
<TextBlock Name="textBlock2" Text="姓名" VerticalAlignment="Top" Width="120" />
<TextBlock Name="textBlock3" Text="性别" VerticalAlignment="Top" Width="120" />
<TextBlock Name="textBlock4" Text="出生年份" />
</StackPanel>
<ListBox Name="listEmployees" Margin="0,40" ItemsSource="{Binding}" VerticalAlignment="Top" Height="500" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel >
<TextBlock Text="{Binding Number}" />
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Age}" />
<TextBlock Text="{Binding BirthYear}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
|
(2) XAML代码
|
public ZiDingYi()
{ InitializeComponent();
ObservableCollection<Employee> employees=new ObservableCollection<Employee>
{
new Employee{Number=2000,Name="张三",Age=10},
new Employee{Number=2001,Name="李四",Age=11},
new Employee{Number=2002,Name="yz",Age=12}
};
listEmployees.DataContext = employees;
}
|
效果图:

注意:此处使用模板的方式是直接嵌套在ListBox中,但在很多情况下为了方便复用通常会将数据模板保存在资源字典中,然后通过ListBox的ItemTemplate属性引用。