2010-03-26 50 views
8

如果我在虚拟模式下使用ListView,那么据我所知,列表视图只跟踪列表中的少量项目。当用户动态滚动时,它会检索它需要从虚拟列表中显示的项目。如何在虚拟模式下向ListView添加/删除项目?

但是如果项目被添加到主列表或从主列表中删除,该怎么办?如果在列表视图显示的索引范围之外添加/删除项目,那么我会假定列表视图会在用户滚动到该索引时显示添加/丢失的项目。它是否正确?但是如果从用户当前正在查看的索引范围中添加/删除项目,该怎么办?如何触发列表视图来刷新当前正在查看的项目以显示新的/缺失的项目?

供参考:我使用ObjectListView如果这有什么区别。

回答

8

虚拟列表对项目列表一无所知。它没有跟踪他们,甚至没有一个小集。它只会问“你想在第n行显示什么?”

如果您的主列表发生更改,您只需重绘列表。 Invalidate()将为您做到这一点。然后,listview会再次询问你应该在控件的每一行显示的内容。

如果您正在使用ObjectListView,您是否考虑过使用FastObjectListView,它可以为您提供虚拟列表的速度优势以及普通ObjectListView的易用性?

+0

我为列表中的每个项目加载单个缩略图,因此我需要在用户查看每个项目时收到通知,以便我可以预加载缩略图。我试图避免一次加载所有的缩略图,因为我可能会显示大量的项目。 目前,我正在调用Build()以在收集更改时更新VirtualLIstView。是否有我想通过Build()调用Invalidate()的原因? – 2010-03-29 18:57:02

+1

虚拟列表完全是你想做的正确方法 - 我已经使用完全相同的策略。而BuildList()是最好的 - 它调用Invalidate()作为其处理的一部分。它工作吗? – Grammarian 2010-03-30 11:59:59