WPF中ListBox ListView数据翻页浏览笔记(强调:是数据翻页,非翻页动画)
ListBox和ListView在应用中,常常有需求关于每页显示固定数量的数据,然后通过Timer自动或者手动翻页操作,本文介绍到的就是该动作的实现。
一.重点
对于ListBox和ListView来讲,后台绑定的ItemSource绑定的一般都是List<T>格式,而List<T>有个方法是Take和Skip,分别意思是取List部分和跳过List部分。
取数据的格式是:List.take().Skip();
二.话不多说,实例说话(后面会附有该例子链接,仅供参考)
(1)Xaml界面上:
<StackPanel>
<ListBox Height="" ScrollViewer.VerticalScrollBarVisibility="Disabled" ItemsSource="{Binding ListShow}"></ListBox>
<Button x:Name="TurnUpButton" Content="上翻页" Click="TurnPageUp" Height="" />
<Button x:Name="TurnDownButton" Content="下翻页" Click="TurnPageDown" Height=""/>
<Button Content="自动翻页" Click="Button_Click_1" Height=""/>
</StackPanel>
ListBox是数据显示区域,三个Button的Content已写明各自功能。
(2)CS代码
public partial class MainWindow : Window
{ public ObservableCollection<string> ListShow
{
get { return (ObservableCollection<string>)GetValue(ListShowProperty); }
set { SetValue(ListShowProperty, value); }
} public List<string> NameList = new List<string>(); public MainWindow()
{
InitializeComponent();
//WPF数据绑定
this.DataContext = this;
//假数据创建
Data();
//数据显示
ContentShow();
//Timer初始化 为自动翻页做准备
TimeSet(); } private void Data()
{
for (int i = ; i < ; i++)
{
string s = "Name" + i.ToString();
NameList.Add(s);
}
} private void ContentShow()
{
ListShow = new ObservableCollection<string>(NameList.Take(PageSize * Page).Skip(PageSize * (Page - )));
if (NameList.Count % PageSize == )
{
Total = NameList.Count / PageSize;
}
else
{
Total = NameList.Count / PageSize + ;
}
TurnUpButton.Visibility = Page > ? Visibility.Visible : Visibility.Hidden;
TurnDownButton.Visibility = Page < Total ? Visibility.Visible : Visibility.Hidden;
} private void TimeSet()
{
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds();
timer.Tick += timer_Tick;
} void timer_Tick(object sender, EventArgs e)
{
if (Page < Total)
{
Page++;
ContentShow();
}
else
{
Page = ;
ContentShow();
}
} private void Button_Click_1(object sender, RoutedEventArgs e)
{
if (IsOpen == true)
{
IsOpen = false;
timer.Stop();
}
else
{
timer.Start();
IsOpen = true;
}
} private void TurnPageUp(object sender, RoutedEventArgs e)
{
Page--;
ContentShow();
} private void TurnPageDown(object sender, RoutedEventArgs e)
{
Page++;
ContentShow();
}
DispatcherTimer timer;
private bool IsOpen;
private int Page = ;
private int Total;
private int PageSize = ; public static readonly DependencyProperty ListShowProperty =
DependencyProperty.Register("ListShow", typeof(ObservableCollection<string>), typeof(MainWindow), new PropertyMetadata(new ObservableCollection<string>())); }
ListShow是Xaml的ListBox的ItemSource绑定对象,所有数据都是通过ListShow显示到界面上的。
强调一定要用ObservableCollection<T>类型,这样才能在ListShow数据发生改变后,界面自动刷新,普通List<T>赋值上去是不会刷新界面的。
Page--当前页数。PageSize--每页数据数量。Total--总页数。
ListShow = new ObservableCollection<string>(NameList.Take(PageSize * Page).Skip(PageSize * (Page - )));
Take取PageSize*Page条数据,Skip跳过(PageSize*(Page-1))条数据,实际获取的就是1页的数据,即1个PageSize。
下面两条代码是为了限制在Page在首页和尾页时,不能继续向前翻和后翻,而设置的可见不可见。
TurnUpButton.Visibility = Page > ? Visibility.Visible : Visibility.Hidden;
TurnDownButton.Visibility = Page < Total ? Visibility.Visible : Visibility.Hidden;
三.易错点
(1)timer一定要用DispatcherTimer,如果只是用Timer会因为线程问题而不能实现自动翻页。
(2)依赖属性的Register中最后面的New PropertyMedata中是new出来一个空的ObservableCollection<string>(),不是String.Empty或者Null
四.代码下载
WPF中ListBox ListView数据翻页浏览笔记(强调:是数据翻页,非翻页动画)的更多相关文章
- WPF中ListBox /ListView如何改变选中条背景颜色
适用ListBox /ListView WPF中LISTVIEW如何改变选中条背景颜色 https://www.cnblogs.com/sjqq/p/7828119.html
- WPF ItemsControl ListBox ListView比较
在进行列表信息展示时,WPF中提供多种列表可供选择.这篇博客将对WPF ItemsControl, ListBox, ListView进行比较. 相同点: 1. 这三个控件都是列表型控件,可以进行列表 ...
- WPF中ListBox的项ListBoxItem被选中的时候Background变化
使用WPF 中ListBox,点击ListBoxItem的时候,自定义它的背景色,曾经在网上找了一些方法, 不是很理想,后来在StackOverflow上找到了,贴出代码和效果图: 效果图:
- WPF中ListBox滚动时的缓动效果
原文:WPF中ListBox滚动时的缓动效果 上周工作中遇到的问题: 常规的ListBox在滚动时总是一格格的移动,感觉上很生硬. 所以想要实现类似Flash中的那种缓动的效果,使ListBox滚动时 ...
- WPF中ListBox的绑定
WPF中列表式控件派生自ItemsControl类,继承了ItemsSource属性.ItemsSource属性可以接收一个IEnumerable接口派生类的实例作为自己的值(所有可被迭代遍历的集合都 ...
- 转:WPF中ListBox的创建和多种绑定用法
先从最容易的开始演示ListBox控件的创建. Adding ListBox Items下面的代码是向ListBox控件中添加多项ListBoxItem集合.XAML代码如下:<ListBox ...
- WPF中为ListView动态绑定数据(可参考)
GridView gv = new GridView(); DataTable dt = fieldManageBLL.GetFieldManage(moduleName); for(int i=0; ...
- WPF中ListBox控件在选择模式(SelectionMode)为Single时仍然出现多个Item被选中的问题
最近在学习WPF过程中使用到了ListBox控件,在使用时遇到下面的奇怪问题: 代码如下: listBox.Items.Add("绘图"); listBox.Items.Add(& ...
- WPF中ListBox的样式设置
设置之后的效果为
随机推荐
- dubbo之启动时检查
启动时检查 Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认 check="true".所以可以通过 ...
- Shiro Shiro Web Support and EnvironmentLoaderListener
Shiro Shiro Web Support 主要参考: http://shiro.apache.org/web.html 还有涛哥的 作为资源控制访问的事情,主要使用在网络后台方面,所以了解了本地 ...
- XML的解析方式
//解析和输出XML public void showXml() { string filepath = Application.dataPath + @"/my.xml"; if ...
- BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛 网络流 + 二分 + Floyd
Description FJ's cows really hate getting wet so much that the mere thought of getting caught in the ...
- 洛谷P1616 疯狂的采药【完全背包】
题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说 ...
- CF135E Weak Subsequence (计数问题)
题目传送门 题目大意:对于给定字符集大小k,求有多少个字符串满足它的最长[既是子串又是弱子序列]的长度为w: 神仙计数题 打表发现,对于字符串S而言,它的最长[既是子串又是弱子序列],一定存在一个对应 ...
- autoware安装
1.Autoware的地址为https://github.com/CPFL/Autoware2.Install dependencies for Ubuntu 16.04 kinetic安装教程ins ...
- MongoDB简介、特点、原理、使用场景、应用案例
简介 MongoDB[1] 是一个基于分布式文件存储的数据库.由C 语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB[2] 是一个介于关系数据库和非关系数据库之间的产品, ...
- 洛谷 P2341 BZOJ 1051 [HAOI2006]受欢迎的牛
题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...
- cogs 983. [NOIP2003] 数字游戏
983. [NOIP2003] 数字游戏 ★☆ 输入文件:numgame.in 输出文件:numgame.out 简单对比时间限制:1 s 内存限制:128 MB 题目描述 丁丁最近沉 ...