How do I sort groups of data items?(WPF)
今天我要介绍如何使用CollectionViewSource对数据进行分组以及对各个组进行排序
示例中的数据源是一组类型为Animal的对象组成的数据集合。Animal类包含Name和Category(枚举类型)两个属性。现在要以Category为分组来显示数据:
<Window.Resources>
<local:Animals x:Key="animals"/>
<CollectionViewSource x:Key="cvs" Source="{Binding Source={StaticResource animals}, Path=AnimalList}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Category"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
<DataTemplate x:Key="animalTemplate">
<TextBlock Text="{Binding Path=Name}" Foreground="MediumSeaGreen"/>
</DataTemplate>
</Window.Resources>
<ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}" ItemTemplate="{StaticResource animalTemplate}"/>
我在上一篇文章中介绍过CollecitonViewSource。CollectionViewSource类会在数据源的上层生成一个视图。这个视图监控着选中项,并且允许我们对数据项进行分组,排序和过滤
运行上面的代码后,可以看到动物的名称,但分组信息没有显示出来。接下来要创建一个显示分组信息的模板。CollectionViewSource将每个分组都包装到CollectionViewGroup对象中。然后显示其Name属性即可:
<DataTemplate x:Key="categoryTemplate">
<TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Foreground="ForestGreen" Margin="0,5,0,0"/>
</DataTemplate>
接下来让ItemsControl控件的GroupStyle属性应用上面的模板:
<ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}">
<ItemsControl.GroupStyle>
<GroupStyle HeaderTemplate="{StaticResource categoryTemplate}" />
</ItemsControl.GroupStyle>
</ItemsControl>
如果需要显示多级别的分组,可以添加多个GroupStyle(示例中只添加了一个)
现在,程序已经可以正确地显示分组和各个项目了。如果还要实现组的排序,并对组内的项进行排序该怎么作呢?我看到有人想写个类似于”SortGroups”的方法来实现这个功能。实际上不必这么做,只要对“进行了分组的属性”进行排序就可以实现这个功能:
<CollectionViewSource x:Key="cvs" Source="{Binding Source={StaticResource animals}, Path=AnimalList}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Category"/>
</CollectionViewSource.GroupDescriptions>
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Category" />
<scm:SortDescription PropertyName="Name" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
有一点需要注意:Category是一个枚举类型,所以“组排序”的顺序是根据其在枚举中定义的顺序。而Name属性是字符串类型,所以“组内排序”是根据字母顺序
程序截图:
原文地址:http://www.beacosta.com/Archive/2006_01_01_bcosta_archive.html
转载于:https://www.cnblogs.com/stswordman/archive/2007/01/08/615092.html
How do I sort groups of data items?(WPF)相关推荐
- 【转】多线程Core Data
原文地址:http://www.cocoanetics.com/2012/07/multi-context-coredata/ Multi-Context CoreData When you star ...
- numpy np.sort()函数(指定对某一轴进行排序,返回数组的排序副本)(成对数组不要用这个排,用哪个啥lexsort()或argsort()都行)
指定对哪一层进行排序,如果需排序的是多维数组,特别是那种np.sort()貌似不太友好 from numpy\core\fromnumeric.py @array_function_dispatch( ...
- Why Apache Spark is a Crossover Hit for Data Scientists [FWD]
Spark is a compelling multi-purpose platform for use cases that span investigative, as well as opera ...
- 【Hadoop】HBase 数据模型(Data Model)
Data Model 在HBase中,数据是存储在有行有列的表格中.这是与关系型数据库重复的术语,并不是有用的类比.相反,HBase可以被认为是一个多维度的映射. HBase数据模型术语 Table( ...
- 【javaWeb微服务架构项目——乐优商城day07】——Elasticsearch介绍和安装及使用(安装kibana,安装ik分词器,Spring Data Elasticsearch,高级查询)
文章目录 0.学习目标 1.Elasticsearch介绍和安装 1.1.简介 1.1.1.Elastic 1.1.2.Elasticsearch 1.1.3.版本 1.2.安装和配置 1.2.1.新 ...
- 微服务架构(7):ElasticsearchSpring Data Elasticsearch的使用
微服务架构(7):Elasticsearch&&Spring Data Elasticsearch的使用 学习目标 1.Elasticsearch介绍和安装 1.1.简介 1.1.1. ...
- vue 数组赋值_如何给Vue的data中的数组赋值?
慕运维8079593 html {{item.index}} {{item.domain}} {{item.price}} {{item.trade_type}} {{item.endtime ...
- 几个常用的文本处理shell 命令:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk
内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符 ...
- C#——实现IComparableT 接口,ArrayLIst调用ArrayLIst.Sort()抛出System.InvalidOperationException异常解决方案
问题描述 未经处理的异常: System.InvalidOperationException: 未能比较数组中的两个元素. ---> System.ArgumentException: 必须至少 ...
最新文章
- JavaScript获取鼠标左键选中的内容
- 常考数据结构和算法:设计LRU缓存结构
- 2016 年崛起的 JS 项目
- C++中size_type类型详解
- 使html表格可编辑状态,js+Html实现表格可编辑操作
- 寂寞了就去搞钱?俞敏洪举报“俞敏洪”:“搞钱论”没一句话是我说的
- libusb-win32学习笔记(一)
- 操作系统的进程和线程的相关知识的理解
- android image 位移动画_Android共享元素转场动画实现
- ios android 通用字体,教你如何在iOS项目中设置各种字体
- mysql学生管理系统背景_学生基本系统管理
- 小沈阳最经典的99句台词 保证你从头笑到尾
- 蓝牙inquiry流程之命令下发
- 【JVM系列JKD8】参数参考表
- HDU 3221 Brute-force Algorithm(指数降幂公式)
- 《疯狂的石头》在线观看(网通用户)
- 双节有惊喜,思维导图优惠乐翻天
- Date.now()和new.Date().getTime()的区别
- MySQL入门之目录
- hbase major compact脚本