最近项目中一直在和PagedCollectionView这个类打交道。通过它,我们可以以分页的形式自动处理并显示集合中的片段,尤其是和Pager控件配合的时候更能彰显其威力。

PagedColectionView类实现了ICollectionView接口,因此除分页外,它也同时提供了的其他一些对集合操作非常有用功能,如

  • Sorting 排序
  • Filtering 过滤
  • Grouping 分组

我们用一个简单的DataGrid演示这些功能。

首先创建一个超简单的实体类

    public class Person {
public string FullName { get; set; }
public int? Age { get; set; }
}

接着构造一个List<Person>

            var peopleList = new List<Person> {
new Person(){ FullName="forever",Age=13 },
new Person(){ FullName="fish",Age=14},
new Person(){ FullName="SBPP",Age=40},
new Person(){FullName="TNT",Age=null},
new Person(){FullName="SARS",Age=5}
};

然后后创建一个PagedCollectionView的新实例,并以上面创建的Person集合作为其构造函数的参数:

PagedCollectionView pcv = new PagedCollectionView(peopleList);

现在让我们看一下如何通过PagedCollectionView简单的针对集合进行排序

ICollectionView接口定义了一个SortDescriptions集合,用以设置视图的排序规则,比如:要让我们的Person集合先按照年龄(Age)正序排列再按照全名(FullName)倒序排列,我们可以通过添加两个SortDescription对象来完成这个需求:

pcv.SortDescriptions.Clear();

var sortDescription1 = new System.ComponentModel.SortDescription("Age", System.ComponentModel.ListSortDirection.Ascending);
var sortDescription2 = new System.ComponentModel.SortDescription("Age", System.ComponentModel.ListSortDirection.Ascending); pcv.SortDescriptions.Add(sortDescription1);
pcv.SortDescriptions.Add(sortDescription2);
 

F5运行后:

ICollectionView同时也提供了分组功能。和排序一样,我们只需添加GroupDescription对象到GroupDescription中即可。当前GroupDescription只提供实现一种分组方式--即通过属性名分组(PropertyGroupDescription)。

我们实体类中加入一个Gender属性标识性别

    public class Person {
public string FullName { get; set; }
public int? Age { get; set; }
public string Gender { get; set; }
}
接着修改我们的Person集合
            var peopleList = new List<Person> {
new Person(){ FullName="forever",Age=13,Gender="男" },
new Person(){ FullName="fish",Age=14,Gender="公"},
new Person(){ FullName="SBPP",Age=40,Gender="男"},
new Person(){FullName="TNT",Age=null,Gender="男"},
new Person(){FullName="SARS",Age=5,Gender="无"},
new Person(){FullName="Lulu",Age=18,Gender="女"}
};

最后,添加分组规则

pcv.GroupDescriptions.Add(new PropertyGroupDescription("Gender"));
F5运行后:

最后要介绍的就是PagedCollectionView通过实现ICollectionView接口提供的任意筛选的能力。

用于筛选的Filter属性为Predicate<object>类型,因此我们可以简单的通过Lambda表达式进行集合项的筛选,比如我们要筛选集合中属性Gender为“男”的Person:

pcv.Filter = p => ((Person)p).Gender.Equals("男");

运行后效果如下

够酷够方便吧。

Sliverlight中PagedCollectionView的使用的更多相关文章

  1. Silverlight中异步调用WCF服务,传入回调函数

    以前学的ASP.NET,调用的都是同步方法,同步方法的好处就是,一步一步走,完成这步才会走下一步.然而,WCF使用的都是异步方法,调用之后不管有没有获得结果就直接往下走,最可恶的是异步函数都是Void ...

  2. silverlight中Combox绑定数据以及动态绑定默认选定项的用法

    在Sliverlight中,经常要用到下拉框Combox,然而Combox的数据绑定却是一件令初学者很头疼的事情.今天就来总结一下下拉框的使用方法: 下面写一个简单的例子吧.先写一个日期的Model, ...

  3. [Prism框架实用分享]如何在主程序中合理的弹出子窗体

    大家好 说起子窗体,大家都会想到ChildWindow,多熟悉的一个控件.不错,Sliverlight中已经提供了子窗体的具体实现,而在WPF中却没有这么好的事情(有的第三方控件商已经提供此控件).最 ...

  4. Sliverlight之 画刷

    1,5种画刷 (见Project15) (1)TextBlock控件中的Forground和BackGround属性是一个什么对象?它在前台的完整的写法是什么?(实际是.net做了一个转换,可以直接写 ...

  5. Prism框架 如何在主程序中合理的弹出子窗体

    说起子窗体,大家都会想到ChildWindow,多熟悉的一个控件.不错,Sliverlight中已经提供了子窗体的具体实现,而在WPF中却没有这么好的事情(有的第三方控件商已经提供此控件).最常见的实 ...

  6. Prism 4 文档 ---第5章 实现MVVM模式

        MVVM模式有助于清楚的区分应用程序界面的业务层和展现层.保持一个清晰的应用程序逻辑和UI分离有助于处理开发和设计过程中大量的问题,同时,使得应用程序的测试,维护,和扩展更加容易.MVVM也可 ...

  7. 转:界面之下:还原真实的 MVC、MVP、MVVM 模式

    前言 做客户端开发.前端开发对MVC.MVP.MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式.网上很多文章关于这方面的讨论比较杂乱,各种MV*模式 ...

  8. [转]MVC、MVP、MVVM

    界面之下:还原真实的 MVC.MVP.MVVM 模式 [日期:2015-10-28] 来源:github.com/livoras  作者:戴嘉华 [字体:大 中 小]   前言 做客户端开发.前端开发 ...

  9. MEF 编程指南(七):使用目录

    目录(Catalogs)   MEF 特性编程模型的核心价值,拥有通过目录动态地发现部件的能力.目录允许应用程序轻松地使用那些通过 Export Attribute 注册自身的导出.下面列出 MEF ...

随机推荐

  1. MD5加密Java实现

    package cn.mldn.util; public class MD5Code { /* * 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, 这里把 ...

  2. eclipse快速收缩展开代码

    快速折叠所有代码和展开所有代码都是CTRL+SHIFT+/

  3. 使用JavaScript实现新闻滚动效果

    最近要实现一个滚动新闻效果,在网上查了一些资料,发现基本的实现方法有两种: 使用Marquee标签.这个标签的使用我已经转载了一篇比较详细的文章,这个标签的优点是便于使用,缺点是人们已经逐渐不适用它了 ...

  4. ecmall数据字典

    ecm_acategory //文章分类表 字段 类型 Null 默认 注释 cate_id int(10) 否 自增ID号,分类ID号 cate_name varchar(100) 否 分类的名称 ...

  5. nyoj 108 士兵杀敌(一)

    点击打开链接 士兵杀敌(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师, ...

  6. [ZOJ 1003] Crashing Balloon (dfs搜索)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3 题目大意:给你a,b两个数,问当b由约数1到100组成时,a能否由其 ...

  7. Oracle 11g新参数USE_LARGE_PAGES与AMM使用 (转载)

    在之前的文章(http://space.itpub.net/17203031/viewspace-774843)中,笔者介绍了如何在Linux 2.6内核中配置HugePage以及AMM与其的不兼容性 ...

  8. 【LOB】使用USER_LOBS视图获得当前用户包含LOB字段的表

    包含LOB类型字段的表往往需要特殊关照,如何快速的获得包含LOB对象的数据库表?使用DBA_LOBS.ALL_LOBS和USER_LOBS视图可以很方便地获得包含BLOB或CLOB字段的表. 简单看一 ...

  9. jQuery基础---filter()和find()

    这是jQuery里常用的2个方法.他们2者功能是完全不同的,而初学者往往会被误导. 首先 我们看.find()方法:现在有一个页面,里面HTML代码为;程序代码 <div class=" ...

  10. 项目积累——Strus、Hibernate

    在Struts-config.xml中对ActionForm Bean的生命周期用scope进行定义,可用的选项有:pageContext(缺省).request(常用).session.applic ...