2009-04-07 25 views
5

En nuestra aplicación WPF queremos utilizar el patrón básico de MVVM. Estuvimos discutiéndolo y surgieron algunas incertidumbres sobre la relación y validación ViewModel/View. ¿Diría usted que lo siguiente es una buena comprensión de eso?Relación y validación ViewModel/View

  • Cada View tiene una y sólo una ViewModel y el propósito del modelo de vista es para proporcionar su opinión con datos y mango todos los eventos de su punto de vista y comandos. (¿Hay casos en confort ViewModel dos vistas, por ejemplo, una entrada XAML vista de formulario estándar y una importación de CSV que proporciona los mismos datos que la forma y por lo tanto tiene que tener la misma validación?)

  • Validación es manejado exclusivamente por el ViewModel cuando, por ejemplo la vista lanza una ChangedFocus o evento SaveButtonPressed, etc.

  • El modelo es bastante tonto, simplemente ser la estructura de datos en base a uno o más tablas de la base de datos, pero el modelo en sí no lo hace manejar la validación , por ejemplo. Incluso es el ViewModel el que crea y almacena la ObservableCollection de objetos, p. "Clientes" y no el propio modelo.

Cualquier comentario agradecido.

Respuesta

5

Cada View tiene una y sólo una ViewModel

Creo que si usted es estricto en cuanto a su siguiente de la secuencia y después cada vista tendrá sólo un modelo de vista. Tenemos un caso en nuestra aplicación donde los requisitos cambiaron a mitad de camino y fue más fácil tener la referencia de Ver dos Modelos de Vista diferentes. Dependiendo de cómo implemente el patrón, esto puede o no ser posible.

¿Hay casos en que los servicios de una ViewModel dos vistas

Sí, esta es una de las ventajas del patrón.

Validación es manejado exclusivamente por el modelo de vista

No necesariamente. Elegimos que nuestras clases modelo implementaran IDataErrorInfo y realicen la validación ellos mismos. Esto asegura que no importa dónde se use la clase Model, la validación será la misma. Si la validación necesita alguna vez cambiar, está en un solo lugar.

El modelo es bastante tonto

Sólo es tan tonto como usted quiere que sea. Puede incluir reglas de validación y comerciales en el modelo si lo desea.

1

son instancias allí donde confort ViewModel dos vistas

aplicaciones Skinned pueden aprovechar esta capacidad.

El modelo es bastante tonto pero el modelo no gestiona la validación

El modelo puede ser tan inteligente como usted quiera. Y puede incluir "validación" para garantizar la integridad, pero esa validación no incluirá los mensajes que aparecen en la interfaz de usuario.

3

Estoy de acuerdo con todo lo anterior. Solo un comentario: su modelo de vista puede usar otros modelos de vista dentro. Con este enfoque, puede dividir su vista en dos regiones que se sirven con diferentes modelos de vista. Simplemente use ContentPresenter, agréguelo a la propiedad de modelo de vista necesaria (que obtiene el modelo de vista necesario) y use DataTemplate para asociar la vista necesaria con su modelo de vista.

+0

sí He visto esto en una serie de ejemplos en los que ViewModel tiene una colección de ViewModels, buen recordatorio, gracias –

Cuestiones relacionadas