ListBox, VirtualizingStackPanel и плавная прокрутка в WPF
-
20-09-2019 - |
Вопрос
у меня есть ListBox
который может иметь много строк шаблонных записей БД, включая Image
, привязанный к ObservableCollection<MyItem>
.Иногда коллекция могла содержать тысячи предметов.
Производительность отличная, но прокрутка — это поведение по умолчанию.Мне бы хотелось, чтобы прокрутка была плавной, поэтому я снял флажок ScrollViewer.CanContentScroll
.
Теперь у меня плавная прокрутка, но производительность ужасная:данные извлекаются в отдельном потоке, и поток завершается быстро, но для отображения результатов в потоке требуется 10-20 секунд. ListBox
.Я предполагаю, что это потому, что снятие флажка ScrollViewer.CanContentScroll
меняет основу VirtualizingStackPanel
регулярному StackPanel
и поэтому перед отображением результатов загружается вся коллекция.
Итак, мой вопрос заключается в следующем:как сохранить плавную прокрутку, не жертвуя VirtualizingStackPanel
поведение и производительность?
Решение
Если вы снимите флажок CanContentScroll, вы потерять виртуализацию.И ответ очень разочаровывает:Готового решения пока нет :(.
ПС:Это не первый пост здесь с вопросом этот самый вопрос.
Другие советы
Если вы используете .NET 4.5 (или 4.0, если хотите немного взломать), то есть ответ здесь.
[Обратите внимание, что комментарий @Guilluame был здесь задолго до этого ответа, но он не был особенно заметен при просмотре ответов.]