2011-08-04 14 views
7

Tengo un nodo en una TreeView que llené manualmente y quiero mantener ordenado. A través de la interacción del usuario, los encabezados en TreeViewItem pueden cambiar y deben moverse al lugar apropiado en la lista.WPF mantiene una lista de TreeView ordenada

I iterate through foreach creando numerosos TreeViewItem y agregándolos a un nodo padre. Son todos los niños los que necesitan ser ordenados. Luego agrego una SortDescription de la siguiente manera.

tviParent.Items.SortDescriptions.Add(new SortDescription("Header", ListSortDirection.Ascending)); 

Este ordena la lista intial, pero si cambio de la cabecera de uno de los puntos de vista de árbol después de que se muestre el elemento no se hace una especie de nuevo. El texto del encabezado cambia, pero la posición de los elementos en la lista permanece igual.

¿Hay algo que me falta?

He intentado borrar la lista y volver a poblarla, lo cual funcionará, sin embargo causa algunos problemas en mi programa ya que tengo mucha lógica para cuando se cambia el elemento seleccionado y porque uno de los elementos de vista en árbol en La lista que estoy borrando se selecciona e invoca toda esta lógica cuando borro la lista y luego nuevamente cuando vuelvo a seleccionar programáticamente el elemento después de reconstruir la lista.

Respuesta

12

La colección de artículos tendrá que ser refrescada a cualquier cambio en su propiedad

tratar el siguiente código después de la edición de cabecera ....

tviParent.Items.Refresh(); 

si el código anterior no funciona, entonces intente código a continuación después de cada edición ...

tviParent.Items.SortDescriptions.Clear() 
    tviParent.Items.SortDescriptions.Add(new SortDescription("Header", ListSortDirection.Ascending)); 
+0

La segunda opción funcionó, gracias. – WPFNewbie

+0

Me alegro de poder ayudar. –

+0

La segunda opción que proporcionó funcionó para mi TreeView que contiene CheckBoxes. ¡Gracias! –