Pregunta

Estoy modificando una aplicación de Windows que usa System.Windows.Control Elementos de ui,
Quiero que el usuario seleccione un elemento de una jerarquía, por lo que se parece a esto:

árbol

Excepto que no es carpetas, sino una gran jerarquía de objetos remotos, muy profundos y lentos para recuperar.
Cargando toda la jerarquía Antes de mostrarlo sería demasiado lento, tengo que mostrar el primer nivel, y luego mostrarla dentro de una carpeta cuando el usuario hace clic en él.

Estoy pensando en usar un GeneracDicetAtGode e interceptar eventos de selección en los elementos de System.Windows.Control.TreeView para rellenarlos cuando sea necesario.
Pregunta: ¿Es la estrategia de mejores prácticas, o hay un elemento de UI de TreeViewItem que sea más apropiado para esto?

Un componente que lee el contenido de cada carpeta del elemento, también sería aceptable.
La aplicación utiliza System.Windows.Control.

¿Fue útil?

Solución

Si entiendo correctamente, desea que los nodos infantiles se carguen solo cuando se expande el nodo principal (por ejemplo, haciendo clic en su icono de expansión).Cargando niños tras la expansión del nodo, de hecho, suena mejor que cargarlos en la selección de nodos, desde un punto de vista UX.

No estoy al tanto de lo que lo haga, pero puede construir uno mismo fácilmente.El enfoque que vi para esto es agregar un nodo ficticio debajo de cada nodo cuyos niños aún no se han recuperado, y en el controlador de eventos para expandir un nodo, verifique si tiene un nodo ficticio, ySi es así, cargue sus nodos infantiles reales y reemplace el maniquí con ellos.

El nodo ficticio hace que su padre parezca expandible (por ejemplo, tener un icono '+' o triángulo colapsado), que es probablemente lo que necesita.Si pone "(Cargando ...)" O algunos, como el título del muñeco, obtendrá una experiencia de usuario decente.

Otros consejos

1) Crea el TreeView:

System.Windows.Controls.TreeView treeView = new System.Windows.Controls.TreeView();
ContentCanvas.Children.Add(treeView);

2) Inserte el artículo (s) raíz:

System.Windows.Controls.TreeViewItem root = new System.Windows.Controls.TreeViewItem();
root.Header = repository;
treeView.Items.Add(root);

3) Cuando se selecciona un elemento, agregue subtema (s) según sea necesario:

treeView.SelectedItemChanged += delegate
{
    TreeViewItem item = (TreeViewItem)treeView.SelectedItem;
    SparkleLogger.LogInfo("bla", "object:"+item);
    System.Windows.Controls.TreeViewItem subItem = new System.Windows.Controls.TreeViewItem();
    subItem.Header = "hello";
    item.Items.Add(subItem);
};

La adición debe hacerse solo en la primera selección, de lo contrario, los elementos se duplicarán.
¡Cualquier solución mejor sería cálida bienvenida!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top