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

这个是一个完成分组和排序功能的Datagrid,同样只是简单的绑定到List集合,后台不用额外的代码,所有功能都在Xaml中完成:
首先在UI中定义CollectionViewSource资源,在这里定义排序和分组的规则
WPF中定义如下:
- <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>
<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中定义如下:
- <UserControl.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>
- </UserControl.Resources>
- ...
- ...
- <sdk:DataGrid DataContext="{StaticResource ProductsGroup}" AutoGenerateColumns="False"
- ItemsSource="{Binding}" SelectedItem="{Binding SelectedProduct}" Width="300" >
- <sdk:DataGrid.Columns>
- <sdk:DataGridTextColumn Binding="{Binding ID}" Header="编号" />
- <sdk:DataGridTextColumn Binding="{Binding Name}" Header="名称" />
- <sdk:DataGridTextColumn Binding="{Binding Desc}" Header="说明" />
- </sdk:DataGrid.Columns>
- </sdk:DataGrid>
使用CollectionViewSource,通过Xaml绑定自动排序的更多相关文章
- 在WPF中使用变通方法实现枚举类型的XAML绑定
问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我 ...
- 重新想象 Windows 8 Store Apps (53) - 绑定: 与 ObservableCollection CollectionViewSource VirtualizedFilesVector VirtualizedItemsVector 绑定
[源码下载] 重新想象 Windows 8 Store Apps (53) - 绑定: 与 ObservableCollection CollectionViewSource VirtualizedF ...
- DataGridView点击排序完成后如何禁止自动排序
Summary: Disable sorting after clicking DataGridView columnheader,Prevent databound DataGridView fro ...
- 禁用datagridview中的自动排序功能
把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...
- sublime插件 cssComb实现css自动排序及格式化
cssComb是一个实现css代码自动排序,当然顺便也实现了代码的格式化 安装: 首先需要打开sublime搜索安装csscomb插件(前提是已经安装了sublime的package control) ...
- yii去掉自动排序功能
Yii去掉自动排序功能并自定义排序 public function search($params) { $query = SvnManage::find()->addOrderBy([ 'cre ...
- C++的STL之map自动排序特性
#include <iostream> #include <map> using namespace std; int main() {方法一: map<int,int& ...
- DataGridview的自动排序设置
如图,自动排序是每一列的属性,而不是整个datagridview的属性,之前一直在datagridview的属性中找不到,原来是在列的属性中
- JS实现点击表头表格自动排序(含数字、字符串、日期)
这篇文章主要介绍了利用JS如何实现点击表头后表格自动排序,其中包含数字排序.字符串排序以及日期格式的排序,文中给出了完整的示例代码,并做了注释,相信大家都能看懂,感兴趣的朋友们一起来看看吧. < ...
随机推荐
- VS2012 VS2015打开项目加载失败
VS2012 VS2015打开项目加载失败 改成这个$(MSBuildToolsVersion)试试
- spring cloud:Edgware.RELEASE版本hystrix超时新坑
升级到Edgware.RELEASE发现,zuul中不管如何设置hystrix的超时时间均不起作用,仍然是默认的1000ms. 降回低版本后正常,但是低版本的fallback方法中,又拿不到详细异常 ...
- AIX上解压缩.tar.Z, .tar.gz, .zip及.tgz
在AIX上最常见的压缩文件就是.tar檔了,而除了tar文件以外,有时会遇到数据是用其它的压缩文件格式,所以偶顺手整理了一些常见的压缩文件格式,在AIX要怎么解压缩 : · .tar.Z fil ...
- BTrace使用简介
很多时候在online的应用出现问题时,很多时候我们需要知道更多的程序的运行细节,但又不可能在开发的时候就把程序中所有的运行细节都打印到日志上,通常这个时候能采取的就是修改代码,重新部署,然后再观察, ...
- Python中文转拼音代码(支持全拼和首字母缩写)
本文的代码,从https://github.com/cleverdeng/pinyin.py升级得来,针对原文的代码,做了以下升级: 1 2 3 4 1.可以传入参数firstcode:如果为 ...
- XMAL定义后台数据
头部调用程序集xmlns:sys="clr-namespace:System;assembly=mscorlib" <Window.Resources><!--定 ...
- bug Spring Mvc中Jsp页面获取不到Controller中的变量
今天遇到了一个奇怪的问题: jsp代码如下: <h1>数据对比${name}</h1> 在controller里面,有赋值: @RequestMapping(value = & ...
- Window下对nodejs多版本管理GNVM
Windows下对nodejs多版本的管理,实现随意切换! 官方地址: https://github.com/Kenshin/gnvm http://ksria.com/gnvm/ 01.下载GNVM ...
- 研究傅里叶变换的一本好书<<快速傅里叶变换及其C程序>>
快速傅里叶变换及其C程序 <快速傅里叶变换及其C程序>是中国科学技术大学出版社出版的.本书系统地介绍了傅里叶变换的理论和技术,内容包括傅里叶变换(FT)的定义.存在条件及其性质,离散傅里叶 ...
- android 制作9.png图
9.png图片与.png图片的具体不同之处.9.png图片的四周与普通的png图片相比多了一个像素位的白色区域,该区域只有在图片被还原和制造的时候才能看到,当打包后无法看见,并且图片的总像素会缩小2个 ...