我在虚拟模式下使用ListView类,以便RetrieveVirtualItem事件从独立的数据结构中提取项目。当我想对列表项进行重大编辑时,我会这样做:
listView.BeginUpdate();
try {
[code to reset backing data structure]
listView.VirtualListSize = backingDataStructure.Count;
}
finally {
listView.EndUpdate();
}
但是,这似乎没有正确刷新此UI(有时添加到后备存储的新条目不会显示)。这样做的正确方法是什么?
答案 0 :(得分:1)
EndUpdate()
应始终足以让ListView
重新绘制,从而再次触发RetrieveVirtualItem
事件。
确保在将虚拟支持切换到新数据之前调用BeginUpdate()
,并在完成后EndUpdate()
。仅EndUpdate()
不会做任何事情。使用这种模式:
listView.BeginUpdate();
currentBacking = newBacking;
listView.EndUpdate();
答案 1 :(得分:0)
我偶然发现了这个老化的问题,因为我遇到了同样的问题而且BeginUpdate()和EndUpdate()根本不起作用。如果没有在互联网上找到可行的解决方案,我发现了一个可行的假设解决方案(至少在我的情况下)。
将listview的VirtualListSize属性设置为0,然后返回希望控件显示的实际项目数。实施例
ListView.VirtualListSize = 0;
ListView.VirtualListSize = 12345;