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

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

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

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

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

Ответ 2

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

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