本文主要介绍
ListView
在实际应用中的两个问题。
问题一:如何在刷新时避免界面闪烁?
问题二:如何支持大量数据实时加载?
ListView
界面闪烁
界面闪烁可以通过自定义控件避免。实现如下
class NoFlashListView : ListView
{
public NoFlashListView()
{
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
}
protected override void OnNotifyMessage(Message m)
{
if (m.Msg != 0x14)
{
base.OnNotifyMessage(m);
}
}
}
ListView
加载大数据
ListView
加载大数据需要启用虚拟模式 VirtualMode
。主要配置项如下
private void InitListView()
{
//设置虚拟模式
listView1.VirtualMode = true;
//设置要加载ListViewItem的总量
listView1.VirtualListSize = staffs.Count;
listView1.RetrieveVirtualItem += new RetrieveVirtualItemEventHandler(listView_RetrieveVirtualItem);
}
void listView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
if (staffs == null || staffs.Count == 0)
{
return;
}
e.Item = staffs[e.ItemIndex];
}
实践
主要实现100000条记录加载,并且同时刷新所有记录时间参数,界面无闪烁。
源码地址:https://pan.baidu.com/s/1_gcepRJPgwZ7G83j8__lXw