我需要在列表视图中显示大量数据,最多可显示500万行或更多行。我试图找到一个解决方案,我可以显示所有500万个项目,而不是我的应用程序内存中的所有500万项。
所以基本上这个想法是只显示少量项目,例如1k或2k,并且当滚动新数据时,按需从数据库中检索。因此,应用程序在其应用程序内存中永远不会有超过几千个项目。但是,用户不应该意识到这已经完成,列表视图应该表现得好像它有500万行。这意味着如果他向下拖动滚动条,它应该显示500万行中的最后一行而不是当前在内存中的几千行中的最后一行。
你们中有谁有概念如何实现这样的功能?我很感激您提供的任何意见。
谢谢, m00ni
答案 0 :(得分:0)
讨论了wpf中的数据虚拟化 - here是一个很好的起点。
我实施的方法与我在网上发现的方法略有不同。它并不完美,但它很适合我的需求。
我有一个通用的ItemsProvider接口,可以浏览数据并公开一些其他基本功能和有关支持数据的信息。我还创建了一个VirtualizationManager类,它继承自DependencyObject
并具有依赖项属性ScrollableHeight
和VerticalOffset
。这些绑定到ScrollViewer
上的匹配属性(在您的精细ItemsControls
的模板中找到)。当这些属性中的任何一个发生变化时,它们会触发一个回调来计算滚动查看器与(当前加载的)列表的末尾之间的接近程度 - 为此我的VirtualizationManager需要一个ItemsProvider的句柄 - 如果这个小于某个最小量, ItemsProvider被指示加载下一页。整个装置可以通过一组附加属性安装在ItemsControl
上。
我的实现相当特殊,但这个想法很简单。
如果您正在处理非常大的列表,那么您需要的解决方案不仅可以逐步加载,还可以卸载旧项目。在上面的链接中至少有一个这样的解决方案。