Pregunta

He estado jugando un poco con el patrón MVVM y ahora estoy tratando de poner en práctica una pequeña aplicación basada en ella.

Esta aplicación tiene una cuadrícula de datos en el que, sorprendentemente, se presenta algunos datos. Ahora estoy tratando de añadir un poco de habilidad agrupar a ella. Yo sé cómo escribir esto en el código (C # y XAML), pero me pregunto en qué capa debo poner el código responsable.

Una parte de mí me dice que debería estar en la vista, porque de código especialmente para ese punto de vista específico. No es genérico y sirve uno purpos:. Para agrupar los datos

Por otro lado creo que debería manejarlo en el modelo de vista mediante un comando. Se siente, sin embargo, como si estuviera contaminando mi modelo de vista con vistas lógica específica.

Cualquier ligt que puede ser derramada en esto?

¿Fue útil?

Solución

En la mayor parte de mi MVVM aplicaciones trato de dividir las responsabilidades de esta manera:

  • La vista simplemente debe realizar una sencilla traducción de los datos a ViewModel píxeles. Por lo general, esto resulta en su mayoría XAML y muy poco detrás de código.
  • El modelo de vista debe realizar lógica de la vista-específico como agrupación etc. A menudo, incluso tengo múltiples ViewModels por vista. Usted puede tener un modelo de vista principal que expone una lista de sub-ViewModels por grupo a la vista, por ejemplo, para implementar la agrupación.
  • Si tiene alguna lógica que se aplica a las más de un modelo de vista es probablemente la lógica de dominio y debe entrar en el dominio del modelo.

Así que creo que los grupos se deben ir en el modelo de vista.

Otros consejos

No hay una respuesta a esto. Realmente depende de su escenario:

1) ¿El usuario tiene ninguna influencia sobre el asunto? Si no lo hacen, y es una agrupación fija, yo publico una propiedad con IGrouping y uso el Dataservice o LINQ que hacerlo antes de que entre en la vista.

Por lo general es menos eficiente si se realiza una agrupación en la vista, pero no es una opción clara. Si el usuario puede seleccionar una gran cantidad de diferentes agrupaciones, esto podría ser una pena pena pagar por la usabilidad añadido ..

Si el usuario tiene alguna influencia en la agrupación que me unen a un ICollectionView expuesto por el modelo de vista. La vista soportes agrupar, filtrar, ordenar y moneda y la interfaz ICollectionView es de System.ComponentModel por lo que no tendría que agregar una referencia "GUI" a su proyecto modelo de vista. También el WPF DataGrid admite la interfaz ICollectionView.

Si el usuario no tiene influencia en la agrupación (los grupos son fijos) que acababa de "pre" -Grupo de los datos en el modelo. HTH.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top