博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
支持数据列表分页的帮助类
阅读量:5912 次
发布时间:2019-06-19

本文共 2913 字,大约阅读时间需要 9 分钟。

支持分页的MVVM组件大家可以网上找,老周这个类只是没事写来娱乐一下的,主要是功能简单,轻量级,至少它满足了我的需求,也许还有未知的 bug 。

这个类支持对数据列表进行分页处理,原理是利用 Skip 和 Take 扩展方法,从源列表中取出某一段数据。在实例化的时候,需要提供一个 IEnumerable<T> 对象作为参数,本类会根据这个数据源来计算分页,使用参数T使其支持泛型。

 
public PagabledCollection(IEnumerable
srcItems) { _containerItems = srcItems; // 总项目数 _totalItems = _containerItems.Count(); // 计算总页数 ComputePages(); CurrentPage = 1; //默认页 }
 

私有字段 _containerItems 主要用来引用源数据列表,_totalItems表示所有数据的总数,CurrentPage属性表示的是当前页的索引,一般来说,分页是从第1页开始的,即当前页的索引最小值为1,最大值是总页数。

ComputePages方法用来计算总页数,代码如下:

 
private void ComputePages()        {            int p = TotalItems / PageSize;            if ((TotalItems % PageSize) > 0)            {                p++;            }            TotalPages = p;            ……        }
 

把数据总数除以每页显示条数(PageSize)就能得到页数,但要注意一点,就是余数的问题。比如数据总数为10,每页显示3条数据,那么 10 / 3的结果为3,余数为1,这时候,总页数应该为4,而不是3。所以上面代码在除法运算后要检查一下,如果存在余数,就把总页数加上1。

 

CurrentPage 属性表示当前页索引,当该属性修改后,要根实际情况从源数据列表中取出一段数据,然后用 PagedItems 属性公开。

 
public int CurrentPage        {            get { return _currentPage; }            set            {                if (_currentPage != value)                {                    if (value < 1) _currentPage = 1;                    else if (value > TotalPages) _currentPage = TotalPages;                    else _currentPage = value;                    // 筛选内容                    SetPagedItemsCore();                    CheckPaging();                    OnPropertyChanged(nameof(CurrentPage));                }            }        }
 

上面说过,当前页索引的最小值为1,最大值为总页数,所以在set属性时要进行验证。SetPagedItemsCore

方法的功能是根据当前页索引,从源数据列表中筛选出一段数据。方法定义如下:

private void SetPagedItemsCore()        {            var r = _containerItems.Skip((CurrentPage - 1) * PageSize).Take(PageSize);            PagedItems = r;        }

从源数据列表中取数据的开始位置 = (当前页码 - 1) * 每页显示数,要提取的数据量 = PageSize,即每页显示数量。

 

在使用时,直接实例化类型,并把数据源从构造函数传入,然后绑定到UI上就可以了。

 
List
list = new List
(); for(int x=1; x<= 200; x++) { list.Add(x); } PagabledCollection
cols = new PagabledCollection
(list); cols.PageSize = 12; rootlayout.DataContext = cols;
 

 

而在 XAML 文档中,直接绑定到PagabledCollection实例的各个属性即可。

 
每页显示条数:
 

 

最后,运行程序,效果基本满意。

 

这个类嘛,写得不算专业,总体来说属于娱乐层次,就给大家用来做入门学习参考吧。

 

 

分类:
 , 
标签:
 , 

转载地址:http://hfmpx.baihongyu.com/

你可能感兴趣的文章
JS中的call、apply、bind方法详解
查看>>
Etcd超全解:原理阐释及部署设置的最佳实践
查看>>
PAT A1038
查看>>
dva中组件的懒加载
查看>>
使用logrotate完成日志自动切分并轮转
查看>>
时序数据库连载系列:指标届的独角兽Prometheus
查看>>
mp4文件如何转换为webm格式
查看>>
linux mpstat命令
查看>>
如何发布你自己的React模块至NPM
查看>>
算是目前看到过最好的面试手册了
查看>>
入门nodeJs(第一课)
查看>>
《JavaScript数据结构与算法》笔记——第6章 集合
查看>>
JDK环境变量-win10
查看>>
让div在屏幕中居中(水平居中+垂直居中)的几种方法
查看>>
网易云捕性能踩坑解决之道上篇
查看>>
react的漫漫之路
查看>>
数据类型之字符串篇
查看>>
Laravel 开源电商体验与部署
查看>>
[LeetCode] 678. Valid Parenthesis String
查看>>
工作之余,根据思否安卓App写了一个SF小程序{::}
查看>>