Sliverlight中PagedCollectionView的使用

最近项目中一直在和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的使用

时间: 2024-11-05 14:47:52

Sliverlight中PagedCollectionView的使用的相关文章

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

以前学的ASP.NET,调用的都是同步方法,同步方法的好处就是,一步一步走,完成这步才会走下一步.然而,WCF使用的都是异步方法,调用之后不管有没有获得结果就直接往下走,最可恶的是异步函数都是Void类型,得不到返回结果,虽然有Completed的事件处理,但是还是感觉比较束缚,无法与前端交互. 这里就跟大家分享一种传入回调函数的方法,把前台的方法写好,传到后台,让异步方法调用完成时执行.废话不多说了,开始写代码: 首先,要先建一个带网站的sliverlight项目,这里就不细说了,在网站中添加

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

在Sliverlight中,经常要用到下拉框Combox,然而Combox的数据绑定却是一件令初学者很头疼的事情.今天就来总结一下下拉框的使用方法: 下面写一个简单的例子吧.先写一个日期的Model,代码如下: public class Date { public string DateName { get; set; } public string DateValue { get; set; } public Date() { } public Date(string name, string

Prism4 文档翻译系列---第5章 实现MVVM模式

MVVM模式有助于清楚的区分应用程序界面的业务层和展现层.保持一个清晰的应用程序逻辑和UI分离有助于处理开发和设计过程中大量的问题,同时,使得应用程序的测试,维护,和扩展更加容易.MVVM也可以极大的提升代码的可重用性也可以使开发人员和设计人员在分别开发应用程序的某一部分时更方便的沟通交流. 运用MVVM模式,应用程序的UI和下层表现以及业务逻辑被拆分到三个单独到类中:视图,封装了UI和UI逻辑:视图模型,封装了展现逻辑和状态:模型,封装了应用程序的业务逻辑和数据. Prism包含了如何在Sil

WindowsPhone 8.1 新闻应用开发--缓存研究(1)

最近要开发一个新闻应用,暂定从Api获取新闻html,再放在WebView中展示(WP8.1已经把WebBrowser改成了WebView). Api还没开发好,因此参考知乎日报的Api:https://github.com/izzyleung/ZhihuDailyPurify/wiki/%E7%9F%A5%E4%B9%8E%E6%97%A5%E6%8A%A5-API-%E5%88%86%E6%9E%90 新闻应用的难点之一在于如何实现缓存,参考了一些文章,在WP上实现缓存的思路是:获取目标网址

[转]MVC、MVP、MVVM

界面之下:还原真实的 MVC.MVP.MVVM 模式 [日期:2015-10-28] 来源:github.com/livoras  作者:戴嘉华 [字体:大 中 小] 前言 做客户端开发.前端开发对MVC.MVP.MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模 式.网上很多文章关于这方面的讨论比较杂乱,各种MV*模式之间的区别分不清,甚至有些描述都是错误的.本文追根溯源,从最经典的Smalltalk- 80 MVC模式开始逐步还原图形界面之下最

Prism4 文档翻译系列---第6章 高级MVVM场景

在上一章中描述了如何通过将UI,表现逻辑,业务逻辑分别放到三个单独的类中(View,View Model,Model),实现这些类之间的交互(通过数据绑定,命令以及数据验证接口)以及实现一个策略来处理建筑和绑定的方式实现MVVM的基本元素. 通过使用实现MVVM的这些基本元素的方式可以支持应用程序中许多的应用场景.然而,您可能会遇到更复杂的场景,需要扩展基本MVVM模式或者需要应用更先进的技术.如果你的应用程序比较大或者比较复杂,这种情况很有可能会发生,但也可能在很小的应用中遇到这些场景.Pri

MVC、MVP、MVVM 模式(待续)

本文将从收集来的资料整理分析MVC模型的各种应用以及其演化历程 一. 介绍 MV* 模式 MVC.MVP.MVVM 模式都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式.追根溯源,从最经典的Smalltalk-80 MVC模式开始逐步还原图形界面之下最真实的MV*模式. GUI程序所面临的问题 图形界面的应用程序提供给用户可视化的操作界面,这个界面提供给数据和信息.用户输入行为(键盘,鼠标等)会执行一些业务逻辑,可能会导致对应用程序数据的变更,数据的变更自然需要用户界面的同步变更以

切图崽的自我修养-[MVVM] Js MV*模式浅谈

前言 做客户端开发.前端开发对MVC.MVP.MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式.网上很多文章关于这方面的讨论比较杂乱,各种MV模式之间的区别分不清,甚至有些描述都是错误的.本文追根溯源,从最经典的Smalltalk-80 MVC模式开始逐步还原图形界面之下最真实的MV模式. GUI程序所面临的问题 图形界面的应用程序提供给用户可视化的操作界面,这个界面提供给数据和信息.用户输入行为(键盘,鼠标等)会执行一些应用逻辑,应用逻辑(a

ASP.NET web express中使用arcgis sliverlight

1. 在visual studio 2013 工具扩展中搜ESRI,选择合适的模版安装 2. 项目新建,刚刚安装的模版 3. 通常会报一个错误,interactions的 4. 工具->nugit程序管理包,搜索interactivity 进行安装(这里需要使用IE打开,否则会报一个指针错误) ASP.NET web express中使用arcgis sliverlight,布布扣,bubuko.com