自定义WPF分页控件的全过程记录
一、分页控件功能说明#
实现如上图所示的分页控件,需要实现一下几个功能:
- 可以设置每页能够展示的最大列数(例如每页8列、每页16列等等)。
- 加载的数组总数量超过设置的每页列数后,需分页展示。
- 可以直接点击指定的列数或者上下页按钮进行页面跳转
二、自定义分页控件使用说明#
为了实现以上功能,主要进行以下工作:
1、添加一个自定义按钮pagerbutton类,声明一个依赖属性isactive,用于记录当前页面所在页数的按钮,此时该按钮边框高亮显示,具体代码如下:
2、添加自定义分页控件pagerbar类,用于展示分页按钮(使用pagerbutton类)和实现分页跳转,需要定义当前页面、总页数、设置的每页最大列数三个依赖属性,具体如下:
3、添加一个工具类pager,用于将数据按照要求分页,该工具类声明当前页数、总页数、设置的每页最大列数三个属性,具体如下:
4、将pager类和pagebar控件进行数据绑定。具体操作为:在绑定的viewmodel上声明一个pager类,然后将该pager类的属性和pagrbar进行一一对应绑定。具体代码如下:
5、初始化pager类时,在界面绑定的viewmodel里面重新声明一个数组,用于保存分页后的数组,将该数组绑定到待展示的条目控件(例如listbox)上,具体如下:
三、总结说明#
为了实现绑定的数组添加、删除时,pagebar分组控件也能立即更新控件,pager工具类增加以下构造函数,首先保证数组为同一引用,其次使用observablecollection保证界面和viewmodel即时更新:
四、示例源码#
示例源码地址:分页控件源码
五、问题#
在实际应用中,发现如下问题:当需要对绑定的整个数组进行排序时,由于pager类初始化传入的数组必须和实际数为同一个引用且必须为observablecollection数组,那么使用linq排序完成后,必须要使用tolist进行转换,就必须重新初始化observablecollection,那么后续当该observablecollection数组变化时,也无法通知到pager类的数组了。为了解决该问题,想到以下两个方法:
(1)自定义排序,针对observablecollection的每个数组对象进行排序。这样排序完成后observablecollection引用无变化。
(2)先用临时变量保存排序完成的数组,然后清空observablecollection,然后再迭代添加临时数组。如此,observablecollection对象前后也为统一引用。
目前暂时采用了第二种方法,但该方法效率不高。后续有更好的解决方法可以留言讨论。
总结
到此这篇关于自定义wpf分页控件的文章就介绍到这了,更多相关自定义wpf分页控件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: 关于C#继承的简单应用代码分析
推荐阅读
-
[WPF自定义控件库] 模仿UWP的ProgressRing
-
如何在双向绑定的Image控件上绘制自定义标记(wpf)
-
[WPF自定义控件库]使用TextBlockHighlightSource强化高亮的功能,以及使用TypeConverter简化调用
-
WPF的ListView控件自定义布局用法实例
-
两款不同应用场景的Wpf分页控件
-
[WPF自定义控件库]好用的VisualTreeExtensions
-
[WPF自定义控件库]了解WPF的布局过程,并利用Measure为Expander添加动画
-
[WPF 自定义控件]自定义一个“传统”的 Validation.ErrorTemplate
-
WPF简单的分页控件实现
-
[WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互