Desde un lado, ViewModel podría ser un contenedor para el objeto Model y lo puede ampliar con los detalles de la presentación. Por ejemplo, si tiene un objeto Model - Pen, entonces PenViewModel puede contener IsSelected, IsDragging properties etc. This es ViewModel como envoltorio.
Desde el otro lado, ViewModel podría ser una abstracción sobre la Vista que no contiene referencia a controles particulares. No olvide que el de fin de MVVM es unit testing. Entonces, por ejemplo, tienes barras arrastrables en tu aplicación de pintura. Para que pueda abstraer esta característica con el conjunto de ViewModels: BarViewModel {IsSnapped, Position, IsEnabled}, BrushBarViewModel: BarViewModel, PenBarViewModel, etc. Y luego puede cubrir esta función con pruebas unitarias, pero todo esto no tiene relación con el Modelo. Esto es ViewModel as View abstraction.
El modelo está muy cerca del negocio, contiene entidades de negocios y lógica, clases para persistir entidades, servicios. Puede usar diferentes conceptos en su Modelo, p. DDD (Domain-Driven-Design), Fawler's Enterprise Patterns, CQRS (Command Query Responsibility Segregation), SOA (Service Oriented Architecture).
Ver sincroniza el estado con ViewModel (Modelo) utilizando vinculando el mecanismo, el peor caso en el código detrás como en el patrón PresentationModel.
Bases sobre esto, responder a sus preguntas va a ser:
¿Tiene las funciones de suministro Modelo para cargar/guardar las pinturas de/a un archivo XAML?
Nº Modelo no tiene referencia directa a los archivos XAML.
¿El modelo de vista se unen a las propiedades que expone el modelo (color, ancho, posición, etc.)?
No. Encuadernación es el mecanismo de Ver sincronización. Por lo tanto, debe vincular View a esas propiedades. Puede vincular la Vista directamente al Modelo o al contenedor ViewModel.
sí ocurre la validación en el modelo o en el modelo de vista?
Wherenever. Si su validación de soporte de control puede validar en la capa de visualización, p. DateTimePicker no permite seleccionar una fecha incorrecta. Puede escribir una lógica de validación personalizada en ViewModel y cubrirla con pruebas unitarias. Además, la validación puede realizarse en el nivel del Modelo, como verificación adicional, porque el Modelo no puede estar en estado inválido.
Creo que se justifica la discusión sobre la exposición de los cambios de datos que suceden en el Modelo a ViewModel para que puedan vincularse y actualizarse a la Vista mediante el enlace de datos normal. Si piensa en una capa de datos, tendría métricas sobre el estado de los datos extraídos en el proceso de mantener esa información (piense en un almacén de datos fuera de línea, específicamente). Si esas métricas existen y cambian en la capa Modelo, ¿cómo impulsaría la notificación de cambio del Modelo a ViewModel para la vinculación de datos a la Vista? – ScottCher