我有一个ListBox
,可能有很多行的模板化数据库记录,包括Image
,绑定到ObservableCollection<MyItem>
。有时收藏品可能包含数千件物品。
性能很棒,但滚动是默认的跳跃行为。我希望它能够平滑滚动,所以我取消选中ScrollViewer.CanContentScroll
。
现在我有平滑滚动,但性能非常糟糕:数据在一个单独的线程中检索,并且线程快速完成,但结果显示在ListBox
需要10-20秒。我认为这是因为取消选中ScrollViewer.CanContentScroll
会将基础VirtualizingStackPanel
更改为常规StackPanel
,因此它会在显示结果之前加载整个集合。
所以我的问题是:如何在不牺牲VirtualizingStackPanel
行为和性能的情况下保持平滑滚动?
答案 0 :(得分:7)
当您取消选中CanContentScroll时,您lose virtualization。答案非常令人沮丧:目前还没有开箱即用的解决方案:(。
PS:这不是第一篇帖子,问this very question。
答案 1 :(得分:3)
如果您使用的是.NET 4.5(或者如果您愿意破解一下,则为4.0),那么答案是over here。
[请注意,@ Guilluame的评论在这个回答之前就已经出现了,但在浏览答案时并不是特别明显。]