2011-01-05 19 views
13

estamos tratando de encontrar una buena manera de virtualizar el TreeView, los datos no son realmente un problema porque es muy ligero (alrededor de 16 bytes por elemento), el problema es que potencialmente podríamos tener decenas de miles, y aunque los datos reales solo tomarían 160 kb de memoria, los elementos de la vista en árbol sí usan mucha más memoria. Hemos intentado la virtualización con 3 árboles diferentes ahora, WPF, Infragistics y Telerik. Todos ellos tienen grandes problemas que los hace inutilizables para nuestra aplicación:TreeView Virtualization

WPF TreeView: La barra de desplazamiento muestra un comportamiento extraño, salta todo el tiempo, los cambios de tamaño de manera inconsistente, desplazándose arrastrándolo con el ratón no lo hace funciona correctamente (saltos atrás y adelante)

Telerik: Los productos que desaparecen, barra de desplazamiento es errático también, los elementos se expanden al azar colapso, estilos no funcionan

Infragistics: Los elementos no se virtualizan en absoluto, cada elemento permanece en la memoria hace que la virtualización sea inútil.

Hemos estado luchando con esto hace un par de meses, y no hemos podido encontrar una buena solución. ¿Alguno de ustedes ha implementado con éxito la virtualización en un TreeView con más de 9000 elementos? Si es así, ¿cuál fue tu estrategia? ¿Usaste controles de terceros? ¿Funcionó al 100%?

Cualquier sugerencia extremadamente apreciada.

Gracias.

+1

1 Tengo el mismo problema con el WPF virtualizado Treeview, intentado todo y el comportamiento sigue siendo errático cuando se trata de desplazamiento. – BrokenGlass

+0

@BrokenGlass Gracias por apoyar la pregunta. Espero que tengamos una buena solución para esto. – Carlo

+0

también veo mi pregunta relacionada aquí (obviamente, sin respuesta): http://stackoverflow.com/questions/4074475/scrolling-bug-in-wpf-virtualized-treeview – BrokenGlass

Respuesta

5

Hemos utilizado Bea truco de Costa de Stollnitz de sangría artículos en a ListView y el uso de la virtualización de la interfaz de usuario con buenos resultados.

http://www.beacosta.com/blog/?p=45

he conseguido 100.000 artículos en el respaldo ICollectionView, y todavía es muy sensible a la filtración, etc.

+0

es triste que esto no funcione de la caja con vistas de árbol virtualizadas, en lugar de tener que usar este tipo de trucos – BrokenGlass

+0

Pero ella menciona que esta solución se debía a que TreeView no tenía virtualización previa a 3.5, por lo que me pregunto si realmente resuelve el problema Le daré una oportunidad de inmediato, gracias por la sugerencia. – Carlo

+0

Estaba usando la virtualización de la interfaz de usuario con TreeView ejecutando v4.0, y todavía no estaba funcionando muy bien. Resultó que la razón era que era fácil romper la virtualización usando TreeView. ListView le permite evitar estas limitaciones. – codekaizen

2

También estamos en una situación similar, hemos intentado utilizar Syncfusion tree-view y fue patético. Como no teníamos la opción de ningún otro control de terceros y no había una mejor solución disponible, finalmente nos decidimos por la virtualización y la carga por demanda (carga diferida) juntas.

Como en nuestro caso, generalmente todos los nodos no se expandirán en ningún momento. Esto resuelve los problemas de desplazamiento hasta cierto punto y hace que la aplicación se pueda usar en la mayoría de los escenarios. Aunque todavía tenemos nuestras cifras cruzadas y seguimos buscando una mejor solución.

me gustaría mencionar aquí que utilizando tanto la virtualización y la carga en la demanda (Lazy carga) en conjunto tienen sus propios efectos secundarios -

Need a sample for WPF TreeView search with Virtualization and Load On Demand

.

Algunas muestras para la implementación de Carga en demanda -

http://www.codeproject.com/KB/WPF/WPF_Explorer_Tree.aspx

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/1eb3ed3d-6379-4353-9f35-2c0aecb885f2/

http://www.telerik.com/help/wpf/radtreeview-features-load-on-demand.html

+0

Intenté combinar la virtualización y la carga bajo demanda, pero desafortunadamente, la virtualización no funciona cuando se crean los elementos sobre la marcha, solo cuando se vincula (en el WPF y TreeViews de Telerik al menos), por lo que también tuvimos que alejarnos de esa opción. Posiblemente podríamos tener miles de elementos expandidos, lo que significa miles de elementos TreeView en la memoria. Gracias por la sugerencia. – Carlo