2009-11-25 19 views
5

Parece que otros han tenido variaciones en esta pregunta, pero por lo que puedo decir, no se ha dirigido a personas que usan colecciones en un modelo de vista única.MVVM seleccionando un elemento treeview programmatically

Tengo una VM que contiene una ObservableCollection de objetos, no una VM para cada objeto. Por lo tanto, no creo que pueda usar el bool de SelectedItem que a menudo se discute porque no creo que pueda enlazar a la propiedad en los objetos de la colección ... solo las propiedades en la VM.

Así que tengo todo muy bien escrito sin código subyacente y acoplamiento mínimo, pero cuando se agrega un nuevo elemento a la colección, que está vinculado a treeView, necesito seleccionar ese elemento.

Ideas?

Gracias!

Respuesta

4

Al pensar en esto. En realidad, debería compilar un contenedor para cada elemento de la vista en árbol que tiene el bool IsSelected así como el bool IsExpanded que hace la vida mucho más fácil para mostrar los datos. Incluso podría agregarlos a su clase y usarlos desde allí.

+0

Maybe so. Tomé un camino intermedio sin embargo. Seguí adelante e implementé INotifyPropertyChanged en cada uno de los tipos de objetos que la ObservableCollection de la VM mantiene y abroché IsSelected e IsExpanded en ellos. El lado malo es que mis objetos ahora tienen esa pegajosidad en ellos (¿es eso incluso malo?). Lo bueno es que no tuve que crear esa capa adicional de máquinas virtuales que no me proporcionó nada más allá de un lugar para mantener el objeto subyacente y esas dos propiedades. – Bob

+0

Si eso es todo lo que necesita, puede hacerlo de esa manera. – Erin

4

Josh Smith tiene un artículo sobre CodeProject en el que sugiere crear un objeto ViewModel para representar cada nodo de TreeView, y luego autoconectarlos según sea necesario.

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

+0

sí, eso es un buen artículo. No me rechaces, pero creo que puede ser excesivo cuando todo lo que realmente necesitas hacer es conectar un par de interacciones UI (expandir, seleccionar). :) – Bob

Cuestiones relacionadas