集合对象的数据绑定

在集合对象的数据绑定中,

(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属性引用。