是否有任何方法使Windows中的VirtualizingStackPanel仅在尚未加载的情况下清理/重新虚拟化项目?
为了更好地解释我想要的内容:当我使用带有图像的重ItemTemplate加载一大串项目时,我会使用VirtualizingStackPanel来避免阻塞UI,并等到所有元素都被绘制到屏幕上。
这是好的,如果你向下滚动,好的和缓慢的在列表中。但问题是当您再次向上滚动查看已经加载一次的项时。由于VirtualizingStackPanel现在已经清理了这些元素,所以需要再次加载这些元素。
我想要的是那些已经装货的物品不被清理。
我不知道他们是怎么做到的,但IMDb应用程序似乎在他们的前250部和最后100部电影中使用了类似的东西。我还注意到,当您滚动时,它们不会加载图像,因此除非您站在列表中,否则它不会阻塞UI。
任何帮助都是非常感谢的!
发布于 2011-10-11 10:40:19
作为警告,我的建议来自WPF背景,而不是Silverlight或WP7。但根据我的经验,它们并没有那么大的不同。
首先,我将检查更改VirtualizationMode是否有帮助。将其设置为“回收”可能已经提高了您的性能。
否则,做你想做的事情就会更有挑战性。您需要创建自己的VirtualizingPanel,并将其设置为动态管理创建项。您可以找到一组很好的文章,这里。但是,与其清除“曾经可见但现在再次虚拟化的项目”,您只是保留它们,从而最终实现了所有的项目。我知道这有点模糊,我这里有代码,我在这里使用的定制ToolBar,如果有必要,我可以张贴一些,以解释如何做到这一点。(同样没有保证它也适用于WP7 )。
诚挚的问候
https://stackoverflow.com/questions/7719153
复制相似问题