wpf performance listbox scroll virtualizingstackpanel

ListBox, VirtualizingStackPanel y Smooth Scrolling en WPF



performance (2)

Al desmarcar CanContentScroll, se pierde la virtualización . Y la respuesta es realmente frustrante: por ahora no hay una solución lista para usar :(.

PD: Este no es el primer post aquí, haciendo esta pregunta .

Tengo un ListBox que puede tener muchas filas de registros de ObservableCollection<MyItem> de datos con plantilla, incluida una Image , vinculada a un ObservableCollection<MyItem> . A veces la colección puede contener miles de artículos.

El rendimiento es excelente, pero el desplazamiento es el comportamiento de salto predeterminado. Me gustaría que tuviera un desplazamiento suave, así que desmarque ScrollViewer.CanContentScroll .

Ahora tengo un desplazamiento suave, pero el rendimiento es horrendo: los datos se recuperan en un subproceso separado, y el subproceso finaliza rápidamente, pero los resultados se muestran en el ListBox en 10-20 segundos. Supongo que esto se debe a que al desmarcar ScrollViewer.CanContentScroll cambia el VirtualizingStackPanel subyacente a un StackPanel normal y, por lo tanto, se carga toda la colección antes de mostrar los resultados.

Así que mi pregunta es: ¿cómo puedo conservar el desplazamiento suave sin sacrificar el comportamiento y el rendimiento de VirtualizingStackPanel ?


Si usa .NET 4.5 (o 4.0 si está dispuesto a piratear un poco), hay una respuesta aquí .

[Tenga en cuenta que el comentario de @ Guilluame estuvo aquí mucho antes de esta respuesta, pero no fue particularmente visible cuando se buscaban las respuestas.]