集合对象的数据绑定

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

(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中,但在很多情况下为了方便复用通常会将数据模板保存在资源字典中,然后通过ListBoxItemTemplate属性引用。