# PageTest **Repository Path**: stardance1993/PageTest ## Basic Information - **Project Name**: PageTest - **Description**: WPF分页控件 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-11-09 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Pagination 一个简单实用的分页控件 ![](https://www.superbed.cn/pic/5be947759dc6d620293af7f9) ### 使用 - 引用`Pagination.xaml`和后台代码`Pagination.cs` - 引用RelayCommand(或者其他的实现了ICommand接口的**泛型**命令) - 在场景界面中,使用Pagination控件,并绑定以下依赖项属性: | 序号 | 依赖性属性 | 说明 | | :--: | :------------------: | :------------------------------------: | | 1 | FirstPage(命令) | 转到第一页 | | 2 | PrePage(命令) | 转到上一页 | | 3 | NextPage(命令) | 转到下一页 | | 4 | LastPage(命令) | 转到最后一页 | | 5 | GoTo(命令) | 转到某一页 | | 6 | PageSizeChange(命令) | 当一页总数更变时,转到第一页并刷新数据 | | 7 | CurrentPage(int) | 当前页数 | | 8 | PageCount(int) | 总页数 | | 9 | PageSize(int) | 一页记录数 | 这些依赖项属性绑定的方法或属性**必须**在ViewModel或者后台代码中声明,比如: ``` private int currentPage; public int CurrentPage { get { return currentPage; } set { currentPage = value; RaisePropertyChanged("CurrentPage"); } } ``` and ``` private RelayCommand nextPageCmd; public RelayCommand NextPageCmd { get { return nextPageCmd ?? (new RelayCommand((p)=> { CalcPageSize(); if (CurrentPage < PageCount) { CurrentPage++; PageTuring(CurrentPage); } })); } } ``` Easy,Simple,Go! ### 后记 这种实现方法个人认为是比较繁琐的,但是毕竟是实现了,我遍观网络,大部分也是这种实现方式。 有一种法子,可以通过依赖项属性,直接将数据源传入分页控件内,再设立一个依赖项属性将过滤过的数据传出以便展示,这样可以将大部分代码封装在控件中,大大减少ViewModel的代码负担,但是,从场景类中传入的集合类型是不确定的,因此,怎么处理泛型类型的逻辑是一个坎,我想到了一个绝妙的方案,可惜这里空白不够。