Nuestro grupo de expertos despúes de días de trabajo y recopilar de datos, han obtenido los datos necesarios, nuestro deseo es que te sea útil en tu trabajo.
Solución:
Para hacer lo que quieras puedes modificar el ItemContainerStyle
de El TreeView
:
Su modelo de vista (el modelo de vista para cada elemento en el árbol) tiene que exponer un valor booleano IsSelected
propiedad.
Si desea poder controlar si un determinado TreeViewItem
está expandido, también puede usar un setter para esa propiedad:
Su modelo de vista tiene que exponer un valor booleano IsExpanded
propiedad.
Tenga en cuenta que estas propiedades funcionan en ambos sentidos, por lo que si el usuario selecciona un nodo en el árbol, el IsSelected
propiedad del modelo de vista se establecerá en true. Por otro lado, si establece IsSelected
a true en un modelo de vista, se seleccionará el nodo en el árbol para ese modelo de vista. Y lo mismo con expandido.
Si no tiene un modelo de vista para cada elemento del árbol, entonces debería obtener uno. No tener un modelo de vista significa que está utilizando sus objetos modelo como modelos de vista, pero para que esto funcione, estos objetos requieren un IsSelected
propiedad.
Para exponer un SelectedItem
propiedad en su modelo de vista principal (el que vincula al TreeView
y que tiene una colección de modelos de vista secundarios) puede implementarlo así:
public ChildViewModel SelectedItem
get return Items.FirstOrDefault(i => i.IsSelected);
Si no desea realizar un seguimiento de la selección de cada elemento individual del árbol, aún puede utilizar el SelectedItem
propiedad en el TreeView
. Sin embargo, para poder hacerlo “estilo MVVM”, debe usar un comportamiento de mezcla (disponible como varios paquetes de NuGet; busque “interactividad de mezcla”).
Aquí he añadido un EventTrigger
que invocará un comando cada vez que el elemento seleccionado cambie en el árbol:
Tendrás que agregar una propiedad SetSelectedItemCommand
sobre el DataContext
de El TreeView
devolver un ICommand
. Cuando el elemento seleccionado de la vista de árbol cambia el Execute
El método en el comando se llama con el elemento seleccionado como parámetro. La forma más fácil de crear un comando es probablemente usar un DelegateCommand
(búsquelo en Google para obtener una implementación, ya que no es parte de WPF).
Una alternativa quizás mejor que permite el enlace bidireccional sin el comando torpe es usar BindableSelectedItemBehavior proporcionado por Steve Greatrex aquí en Stack Overflow.
Probablemente usaría el SelectedItemChanged
event para establecer una propiedad respectiva en su VM.
Reseñas y puntuaciones
Si te gustó nuestro trabajo, tienes la libertad de dejar una división acerca de qué le añadirías a este ensayo.