ListBox, VirtualizingStackPanel и плавная прокрутка в WPF - PullRequest
16 голосов
/ 17 декабря 2009

У меня есть ListBox, в котором может быть много строк шаблонных записей БД, включая Image, привязанных к ObservableCollection<MyItem>. Иногда коллекция может содержать тысячи предметов.

Производительность отличная, но прокрутка - это поведение по умолчанию. Я бы хотел, чтобы у него была плавная прокрутка, поэтому я снял отметку ScrollViewer.CanContentScroll.

Теперь у меня плавная прокрутка, но производительность ужасна: данные извлекаются в отдельном потоке, и поток быстро завершается, но для отображения результатов в ListBox требуется 10-20 секунд. Я предполагаю, что это потому, что снятие отметки ScrollViewer.CanContentScroll меняет базовый VirtualizingStackPanel на обычный StackPanel и поэтому он загружает всю коллекцию перед отображением результатов.

Итак, мой вопрос заключается в следующем: как сохранить плавную прокрутку, не жертвуя поведением и производительностью VirtualizingStackPanel?

Ответы [ 2 ]

7 голосов
/ 17 декабря 2009

Когда вы снимаете галочку с CanContentScroll, вы теряете виртуализацию . И ответ действительно расстраивает: пока нет готового решения: (.

PS: Это не первый пост здесь, задающий этот самый вопрос .

3 голосов
/ 02 ноября 2015

Если вы используете .NET 4.5 (или 4.0, если хотите немного взломать), здесь есть ответ здесь .

[Обратите внимание, что комментарий @ Guilluame был здесь задолго до этого ответа, но он не был особенно заметен при поиске ответов.]

...