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

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

WPF中定义如下:

  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. <DataGrid DataContext="{StaticResource ProductsGroup}" AutoGenerateColumns="False"
  17. ItemsSource="{Binding}" SelectedItem="{Binding SelectedProduct}" CanUserAddRows="False">
  18. <DataGrid.GroupStyle>
  19. <GroupStyle>
  20. <GroupStyle.HeaderTemplate>
  21. <DataTemplate>
  22. <TextBlock  x:Name="txt"  Background="LightBlue" FontWeight="Bold"
  23. Foreground="White" Margin="1" Padding="4,2,0,2"
  24. Text="{Binding Name,StringFormat='生产日期:/{0/}'}" />
  25. </DataTemplate>
  26. </GroupStyle.HeaderTemplate>
  27. </GroupStyle>
  28. </DataGrid.GroupStyle>
  29. <DataGrid.Columns>
  30. <DataGridTextColumn Binding="{Binding ID}" Header="编号" />
  31. <DataGridTextColumn Binding="{Binding Name}" Header="名称" />
  32. <DataGridTextColumn Binding="{Binding Desc}" Header="说明" />
  33. </DataGrid.Columns>
  34. </DataGrid>

<Window.Resources>
<CollectionViewSource x:Key="ProductsGroup" Source="{Binding Products}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="ProductDate" />
</CollectionViewSource.GroupDescriptions>
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="ProductDate" Direction="Descending" />
<scm:SortDescription PropertyName="ID" Direction="Ascending" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Window.Resources>

...
...

<DataGrid DataContext="{StaticResource ProductsGroup}" AutoGenerateColumns="False"
ItemsSource="{Binding}" SelectedItem="{Binding SelectedProduct}" CanUserAddRows="False">
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock x:Name="txt" Background="LightBlue" FontWeight="Bold"
Foreground="White" Margin="1" Padding="4,2,0,2"
Text="{Binding Name,StringFormat='生产日期:/{0/}'}" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ID}" Header="编号" />
<DataGridTextColumn Binding="{Binding Name}" Header="名称" />
<DataGridTextColumn Binding="{Binding Desc}" Header="说明" />
</DataGrid.Columns>
</DataGrid>

SL中定义如下:

  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. <sdk:DataGrid DataContext="{StaticResource ProductsGroup}" AutoGenerateColumns="False"
  15. ItemsSource="{Binding}" SelectedItem="{Binding SelectedProduct}" Width="300" >
  16. <sdk:DataGrid.Columns>
  17. <sdk:DataGridTextColumn Binding="{Binding ID}" Header="编号" />
  18. <sdk:DataGridTextColumn Binding="{Binding Name}" Header="名称" />
  19. <sdk:DataGridTextColumn Binding="{Binding Desc}" Header="说明" />
  20. </sdk:DataGrid.Columns>
  21. </sdk:DataGrid>

使用CollectionViewSource,通过Xaml绑定自动排序的更多相关文章

  1. 在WPF中使用变通方法实现枚举类型的XAML绑定

    问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我 ...

  2. 重新想象 Windows 8 Store Apps (53) - 绑定: 与 ObservableCollection CollectionViewSource VirtualizedFilesVector VirtualizedItemsVector 绑定

    [源码下载] 重新想象 Windows 8 Store Apps (53) - 绑定: 与 ObservableCollection CollectionViewSource VirtualizedF ...

  3. DataGridView点击排序完成后如何禁止自动排序

    Summary: Disable sorting after clicking DataGridView columnheader,Prevent databound DataGridView fro ...

  4. 禁用datagridview中的自动排序功能

    把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...

  5. sublime插件 cssComb实现css自动排序及格式化

    cssComb是一个实现css代码自动排序,当然顺便也实现了代码的格式化 安装: 首先需要打开sublime搜索安装csscomb插件(前提是已经安装了sublime的package control) ...

  6. yii去掉自动排序功能

    Yii去掉自动排序功能并自定义排序 public function search($params) { $query = SvnManage::find()->addOrderBy([ 'cre ...

  7. C++的STL之map自动排序特性

    #include <iostream> #include <map> using namespace std; int main() {方法一: map<int,int& ...

  8. DataGridview的自动排序设置

    如图,自动排序是每一列的属性,而不是整个datagridview的属性,之前一直在datagridview的属性中找不到,原来是在列的属性中

  9. JS实现点击表头表格自动排序(含数字、字符串、日期)

    这篇文章主要介绍了利用JS如何实现点击表头后表格自动排序,其中包含数字排序.字符串排序以及日期格式的排序,文中给出了完整的示例代码,并做了注释,相信大家都能看懂,感兴趣的朋友们一起来看看吧. < ...

随机推荐

  1. mongodb.副本集配置方法(使用keyfile认证部署)

    前提条件: - 已安装MongoDB, 版本以3.6为例 - 系统: Debian9 - 建议做副本集的话, 以3台以上为宜, 本文以1台主机2个服务为例 1.创建数据存放的目录, 并授权 sudo ...

  2. RouterOS双线进行IP分流上网

    环境: 1.第一条:电信静态IP,一级路由分配的IP:第二条:移动光纤 2.通过指定某些IP走电信,某些走移动 注意: 1.当有多条线路进行NAT伪装时,Out. Interface这个必须选择具体的 ...

  3. SpringMvc+Mybatis+Maven+Mysql做一个CRUD的简单例子

    本文档结合 SpringMVC. Mybatis. MySQL,说明如何实现一个简单的数据库单表 CRUD操作.开发工具使用集成了spring mvc的eclipse(Spring Tool Suit ...

  4. makefile中的shell编程注意点

    参考:http://blog.csdn.net/wanglang3081/article/details/49423105 (1)Makefile本质上来讲也是shell脚本,即每条command都是 ...

  5. 微信小程序 —— 动态决定页面元素显示或隐藏的技巧

    在微信小程序开发中,经常遇到一些由后台控制显示(is_open : 1)或者隐藏(is_open : 0),有俩种办法: 复杂办法 1.先在元素的class中 class=’{{show?’true’ ...

  6. YUV 4:2:0 格式和YUV411格式区别

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/coloriy/article/details/6668447 MPEG 储存的 YU(Cb)V(Cr ...

  7. Visio画流程图风格设置

    第一步:选取设计下选用“简单” 第二步:设置颜色为“铅笔” 第三步:设置效果为“辐射” 第四步:效果

  8. Spark机器学习(1):线性回归算法

    线性回归算法,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法. 1. 梯度下降法 线性回归可以使用最小二乘法,但是速度比较慢,因此一般使用梯度下降法(Grad ...

  9. PostgreSQL之时间戳自动更新

    操作系统 :CentOS7.3.1611_x64 PostgreSQL版本 :9.6 问题描述 PostgreSQL执行Insert语句时,自动填入时间的功能可以在创建表时实现,但更新表时时间戳不会自 ...

  10. 解决MySQL8.0报错:Unknown system variable 'validate_password_policy'

    一.问题描述 1.在安装MySQL8.0时,修改临时密码,因密码过于简单(如:123456),不符合MySQL密码规范,会触发一个报错信息: ERROR 1819 (HY000): Your pass ...