Saltar al contenido

Obtener TreeViewItem seleccionado usando MVVM

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *