在WPF中使用ListBox,VirtualizingStackPanel和Smooth Scrolling

Joe*_*ran 17 wpf performance scroll listbox virtualizingstackpanel

我有一个ListBox可能有很多行的模板化DB记录,包括一个Image,绑定到一个ObservableCollection<MyItem>.有时收藏可以容纳数千件物品.

性能很好,但滚动是默认的跳跃行为.我希望它有平滑的滚动,所以我取消选中ScrollViewer.CanContentScroll.

现在我有平滑的滚动,但性能很可怕:数据在一个单独的线程中检索,并且线程快速完成,但结果显示在中需要10-20秒ListBox.我假设这是因为取消选中ScrollViewer.CanContentScroll将底层更改VirtualizingStackPanel为常规StackPanel,因此在显示结果之前加载整个集合.

所以我的问题是:如何在不牺牲VirtualizingStackPanel行为和性能的情况下保持平滑滚动?

Anv*_*aka 7

取消选中CanContentScroll后,您将失去虚拟化.答案真的令人沮丧:目前还没有开箱即用的解决方案:(.

PS:这不是这里的第一篇文章,问这个问题.


Zod*_*man 5

如果你使用.NET 4.5(或4.0,如果你愿意砍了一下),然后还有一个答案在这里

[请注意,@Guillame 的评论在此答案之前就在这里,但在浏览答案时并不是特别明显。]