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 был здесь задолго до этого ответа, но он не был особенно заметен при просмотре ответов.]