2009-06-08 24 views
11

estoy tratando de comprender el enfoque básico de diseño MVVM al utilizar ItemsControl mediante la unión a través de DataTemplates a ObservableCollections en el modelo de vista.¿Debería mi ViewModel tener una ObservableCollection de Views o ViewModels?

que he visto ejemplos que se unen a ObservableCollections de cadenas, Vistas, y ViewModels.

La unión a las cadenas parece ser sólo para demos, es la unión de "ViewModels que contienen colecciones de vistas que contienen colecciones de ViewModels" que el poder de WPF parece llegar realmente a cabo.

Para aquellos de uso competente en el patrón MVVM, ¿cuál es su enfoque estándar para enlazar ItemsControl, ListView, ListBox a las colecciones en un ViewModel? estoy en busca de asesoramiento de la experiencia de esta manera:

  • Utilice siempre ObservableCollection < ...> y lista Nunca < ...> porque ...
  • algo mejor que ItemsControl para mostrar una colección es ...
  • con el fin de hacer funcionar el filtrado para trabajar en su modelo de vista en lugar de código subyacente, el uso ...
  • colecciones uso de las vistas cuando ... y colecciones de ViewModels cuando ...
  • 90% del tiempo que creo un ItemsControl y lo ato a un O bservableCollection de Vistas que tienen su propio ViewModels ...

Respuesta

10

me gustaría utilizar un ObservableCollection de ViewModels por las siguientes razones:

  • ObservableCollection ya tiene eventos disponibles para la señalización cuando se ha modificado (por ejemplo, cuando se añaden elementos/elimina de la colección).
  • Estamos en la 'capa' de ViewModel, por lo que proporciona una separación más limpia para que ViewModel contenga una colección de ViewModels en lugar de Views
  • Si es necesario modificar u obtener datos de elementos dentro de la colección puede hacerlo más fácilmente modifique/acceda a esos datos si los elementos son ViewModels (si son vistas, con frecuencia va a convertir el DataContext de View o acceder a sus elementos de UI).
+0

útil, gracias –

+0

+1, este es definitivamente el camino a seguir. su viewmodel tiene colecciones de viewmodels y la colección de recursos de su vista tiene datatemplates para cada uno de esos viewmodels. –

1

Me gusta usar un ObservableCollection de ViewModels. La vista que se une a la colección puede definir un DataTemplate que le da su aspecto a ViewModel. Esto conduce a un menor acoplamiento entre los componentes.

+0

Si tiene un ObservableCollection de ViewModels (en lugar de Views), entonces ¿cuál es la diferencia entre tener ese XAML en su DataTemplate y tener ese XAML en el archivo .xaml de una Vista? –

1

Tengo la misma pregunta, pero reemplace la "vista" por "modelo". :)

Tengo un MODELO con una colección de otros modelos. Quiero que mi modelo de vista tenga una colección observable de otros modelos de vista, pero una vez que lo instancia así, la conexión entre el contenido de la colección modelo se pierde. ¿Debo comenzar a cablear todos los eventos de la colección observable viewmodels de nuevo a la colección de modelos?

+1

Sí, el evento es la mejor manera de hacerlo. Considere usar el patrón de evento débil para seguridad. – Gusdor

Cuestiones relacionadas