2009-09-07 12 views
32

Me gustaría una descripción simple de cómo implementar un panel virtualizado para un ItemsControl que está enlazado a un ObservableCollection en mi MVVM.WPF VirtualizingStackPanel para un mayor rendimiento

Tengo una instancia de ItemsControl para cada pestaña en un control de pestañas, y el cambio de pestañas se vuelve MUY lento cuando el ItemsControl crece.

¿Qué puedo hacer para acelerar la aplicación?

Abrí un generador de perfiles WPF y vi que cada elemento (que es un control de usuario personalizado) que se muestra en mis ItemsControl de cada pestaña tenía su propio ContentPresenter. Así que esencialmente tenía 100 presentadores de contenido todos corriendo por 100 artículos en mi ObservableCollection en MVVM. ¿Esto es correcto? ¿Cómo puedo optimizar?

Respuesta

48

Hay dos técnicas que pueden ser de gran ayuda. Ambos son descritos muy bien por Bea Stolnitz en su blog.

La primera es UI Virtualization y el segundo es Data Virtualization

En la virtualización de la interfaz de usuario que utiliza cosas como VirtualizingStackPanel para hacer la interfaz de usuario dibujar menos cosas.

virtualización de datos se asegura de que no trae un millón de objetos en memoria cuando sólo se va a mostrar 100.

virtualización Así interfaz de usuario minimiza el número de cosas dibujado y virtualización de datos minimiza el número de cosas que podrían ser dibujado.

Espero que ayude

9

que tenía el mismo problema ind WPF usando TabControl y cuadrícula de datos. Al aumentar el tamaño del elemento DataGrid, ¡las pestañas de conmutación se vuelven MUY lentas! Después de eso encontré esta publicación leyendo el blog de Bea Stolnitz como lo suponía la respuesta anterior. Eso me dio la pista para google "WPF tabcontrol VirtualizingStackPanel" que me da el enlace a DrWPF: http://groups.google.com/group/wpf-disciples/browse_thread/thread/6f3531a1720252dd

Él describe exactamente el problema y da la solución :-))

.... El éxito Potencia es durante la construcción del árbol. Desafortunadamente, si
está utilizando un enfoque MVVM típico con un enlace en la propiedad ItemsSource
de TabControl, el árbol completo debe reconstruirse cada vez que se selecciona un elemento de tabulación
. Esta suele ser una operación muy costosa. ....

Cuestiones relacionadas