ListBox, VirtualizingStackPanel и плавная прокрутка в WPF

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

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

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

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

2 ответов


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

PS: Это не первый пост здесь, прошу этот вопрос.


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

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