在本文中将以ListBox为例讲述在Silverlight中Binding数据集合.

  在这里我们将实体集的绑定分为三类:

     一、直接控件绑定。

     二、DataTemplate模板绑定。

     三、详细信息绑定。

  首先:我们来看第一类直接控件绑定是对控件的ItemsSource属性进行绑定,然后使用SelectedValuePath指定选择值,DisplayMemberPath指定显示值的方式。Xaml代码如下:

 

  1. <!--第一种:直接绑定一个Collection实体集合--> 
  2. <ListBox Height="239" HorizontalAlignment="Left" Margin="112,25,0,0" 
  3.          Name="lbCollection" VerticalAlignment="Top" Width="198"  
  4.          ItemsSource="{Binding}" SelectedValuePath="Author" DisplayMemberPath="Name" /> 

  其次:DataTemplate是对象制作一个数据模板,所以的数据实体都安装这个数据模板来呈现,现在我们看看其Xaml代码如下:

 

  1. <!--第二种:使用DataTemplate绑定一个Collection实体集合--> 
  2.   <ListBox Height="239" HorizontalAlignment="Left" Margin="478,25,0,0"  
  3.            Name="lbTemplate" ItemsSource="{Binding}" VerticalAlignment="Top" Width="198" > 
  4.       <ListBox.ItemTemplate> 
  5.           <DataTemplate> 
  6.               <StackPanel Orientation="Horizontal" Margin="3"
  7.                   <sdk:Label  Content="DocName:"></sdk:Label> 
  8.                   <TextBlock Text="{Binding Name}"></TextBlock> 
  9.                   <sdk:Label  Content="  Author:"></sdk:Label> 
  10.                   <TextBlock Text="{Binding Author}"></TextBlock> 
  11.               </StackPanel> 
  12.           </DataTemplate> 
  13.       </ListBox.ItemTemplate> 
  14.   </ListBox> 

  最后:详细信息绑定是当用户点击列表中某一个实体标题属性的时候,自动显示其实体的详细信息给用户观看,注意在这里列表的数据源以及详细信息显示页的数据源都必须是CollectionViewSource类型的,其Xaml代码如下:

 

  1. <!--第三种:使用绑定一个Detail详细信息--> 
  2. <StackPanel HorizontalAlignment="Left"  Orientation="Horizontal" VerticalAlignment="top" 
  3.             Width="500" Height="240" Margin="112,294,188,66"
  4.     <ListBox Height="239" HorizontalAlignment="Left" Name="lbDetail"  
  5.              VerticalAlignment="Top" Width="198" ItemsSource="{Binding}" 
  6.              SelectedValuePath="Author" DisplayMemberPath="Name" /> 
  7.  
  8.     <StackPanel x:Name="spDetail"  Width="300" Height="200"
  9.         <TextBlock FontWeight="Bold" Text="{Binding Name}" /> 
  10.         <TextBlock FontStyle="Italic" Text="{Binding Author}"/> 
  11.         <TextBlock Text="{Binding Content}" /> 
  12.         <TextBlock Text="{Binding WriteDate}" /> 
  13.     </StackPanel> 
  14. </StackPanel> 

  本实例的后台代码如下,注意第三种详细信息的绑定方式:

 

  1. public partial class MainPage : UserControl 
  2.     public MainPage() 
  3.     { 
  4.         InitializeComponent(); 
  5.         //获取实体集合 
  6.         ObservableCollection<Info> list = Info.GetList(); 
  7.  
  8.         //第一种数据源赋值 
  9.         this.lbCollection.DataContext = list; 
  10.  
  11.         //第二种数据源赋值 
  12.         this.lbTemplate.DataContext = list; 
  13.  
  14.         //第三种数据源赋值 
  15.         CollectionViewSource collection = new CollectionViewSource { Source = list }; 
  16.         this.lbDetail.DataContext = collection; 
  17.         this.spDetail.DataContext = collection; 
  18.     } 

  本实例定义一个实体以及实体集合如下:

 

  1. public class Info 
  2.     public string Name { get; set; } 
  3.  
  4.     public string Author { get; set; } 
  5.  
  6.     public string Content { get; set; } 
  7.  
  8.     public string WriteDate { get; set; } 
  9.  
  10.     public static ObservableCollection<Info> GetList() 
  11.     { 
  12.         ObservableCollection<Info> list = new ObservableCollection<Info>(); 
  13.         list.Add(new Info() { Name = "文章一", Author = "作者一", Content = "内容一", WriteDate = "2009-02-03" }); 
  14.         list.Add(new Info() { Name = "文章二", Author = "作者二", Content = "内容二", WriteDate = "2009-03-03" }); 
  15.         list.Add(new Info() { Name = "文章三", Author = "作者三", Content = "内容三", WriteDate = "2009-04-03" }); 
  16.         list.Add(new Info() { Name = "文章四", Author = "作者四", Content = "内容四", WriteDate = "2009-05-03" }); 
  17.         list.Add(new Info() { Name = "文章五", Author = "作者五", Content = "内容五", WriteDate = "2009-06-03" }); 
  18.         list.Add(new Info() { Name = "文章六", Author = "作者六", Content = "内容六", WriteDate = "2009-07-03" }); 
  19.         return list; 
  20.     } 

  本实例采用Vs2010+Silverlight 4编写,如需源码请点击 SLBinding3.rar 下载。