首页 > 代码库 > 使用CollectionViewSource,通过Xaml绑定自动排序

使用CollectionViewSource,通过Xaml绑定自动排序

这个是一个完成分组和排序功能的Datagrid,同样只是简单的绑定到List集合,后台不用额外的代码,所有功能都在Xaml中完成:

首先在UI中定义CollectionViewSource资源,在这里定义排序和分组的规则

WPF中定义如下:

 

引入命名空间:xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
  1. <Window.Resources>  
  2.     <CollectionViewSource x:Key="ProductsGroup" Source="{Binding Products}"
  3. <- 分组描述-> 
  4.       <CollectionViewSource.GroupDescriptions>  
  5.         <PropertyGroupDescription PropertyName="ProductDate" />  
  6.       </CollectionViewSource.GroupDescriptions
  7. <--排序描述--> 
  8.       <CollectionViewSource.SortDescriptions>  
  9.         <scm:SortDescription PropertyName="ProductDate" Direction="Descending" />  
  10.         <scm:SortDescription PropertyName="ID" Direction="Ascending" />  
  11.       </CollectionViewSource.SortDescriptions>  
  12.     </CollectionViewSource>  
  13.   </Window.Resources>  
  14.   
  15. ...  
  16. ...  
  17.   
  18. <DataGrid DataContext="{StaticResource ProductsGroup}" AutoGenerateColumns="False"    
  19.                 ItemsSource="{Binding}" SelectedItem="{Binding SelectedProduct}" CanUserAddRows="False">  
  20.         <DataGrid.GroupStyle>  
  21.           <GroupStyle>  
  22.             <GroupStyle.HeaderTemplate>  
  23.               <DataTemplate>  
  24.                 <TextBlock  x:Name="txt"  Background="LightBlue" FontWeight="Bold"   
  25.                             Foreground="White" Margin="1" Padding="4,2,0,2"   
  26.                             Text="{Binding Name,StringFormat=‘生产日期:/{0/}‘}" />  
  27.               </DataTemplate>  
  28.             </GroupStyle.HeaderTemplate>  
  29.           </GroupStyle>  
  30.         </DataGrid.GroupStyle>  
  31.         <DataGrid.Columns>  
  32.           <DataGridTextColumn Binding="{Binding ID}" Header="编号" />  
  33.           <DataGridTextColumn Binding="{Binding Name}" Header="名称" />  
  34.           <DataGridTextColumn Binding="{Binding Desc}" Header="说明" />  
  35.         </DataGrid.Columns>  
  36.       </DataGrid>  

 

 

SL中定义如下:

 

[xhtml] view plaincopyprint?
  1. <UserControl.Resources>  
  2.     <CollectionViewSource x:Key="ProductsGroup" Source="{Binding Products}">  
  3.         <CollectionViewSource.GroupDescriptions>  
  4.             <PropertyGroupDescription PropertyName="ProductDate" />  
  5.         </CollectionViewSource.GroupDescriptions>  
  6.         <CollectionViewSource.SortDescriptions>  
  7.             <scm:SortDescription PropertyName="ProductDate" Direction="Descending" />  
  8.             <scm:SortDescription PropertyName="ID" Direction="Ascending" />  
  9.         </CollectionViewSource.SortDescriptions>  
  10.     </CollectionViewSource>  
  11.   </UserControl.Resources>  
  12.   
  13. ...  
  14. ...  
  15.   
  16. <sdk:DataGrid DataContext="{StaticResource ProductsGroup}" AutoGenerateColumns="False"    
  17.                 ItemsSource="{Binding}" SelectedItem="{Binding SelectedProduct}" Width="300" >  
  18.         <sdk:DataGrid.Columns>  
  19.             <sdk:DataGridTextColumn Binding="{Binding ID}" Header="编号" />  
  20.             <sdk:DataGridTextColumn Binding="{Binding Name}" Header="名称" />  
  21.             <sdk:DataGridTextColumn Binding="{Binding Desc}" Header="说明" />  
  22.         </sdk:DataGrid.Columns>  
  23.       </sdk:DataGrid>