Una frase explicación:
MVVM es una reinvención del patrón bien amado Modelo-Vista-Presentador (MVP) que está diseñado para funcionar especialmente bien con las instalaciones de enlace de datos suministrados con WPF para separar la lógica de aplicación desde el diseño de la interfaz de usuario.
Más largo, más útil, la explicación:
El concepto básico de MVVM es la ruptura, aparte de una aplicación de WPF en componentes separados, cada uno de los cuales tiene una responsabilidad en el proceso de obtención de la información en la pantalla.
Primero tienes el modelo. Esta es una clase con una funcionalidad muy limitada que generalmente se rellena desde alguna fuente externa, como una base de datos o un servicio web. Por ejemplo:
public class MessageModel
{
public string Message { get; set; }
}
En la parte superior de que la capa de los ViewModel, aquí es donde la lógica de la aplicación se encuentra, se notifica a la vista de los cambios en el modelo y asegura la consistencia de datos. Mediante la implementación de la interfaz de enlace de datos INotifyPropertyChanged de dos vías entre el modelo de vista y la vista se da de forma gratuita por WPF:
public class MessageViewModel : INotifyPropertyChanged
{
private MessageModel _model;
public string Message
{
get { return _model.Message; }
set
{
if (_model.Message != value)
{
_model.Message = value;
OnPropertyChanged("Message");
}
}
}
}
Finalmente tienes la vista.Este es un archivo XAML que describe la disposición de los controles que se utilizan para visualizar y editar los datos en el modelo de vista:
<Canvas>
<TextBox Text={"Binding Message"} />
</Canvas>
La razón por la que vas a todo este esfuerzo es que el modelo es muy ligero y fácil de pasar a través límites de dominio. Es simple enviarlo o recibirlo desde un servicio web o asignarlo a una tabla de base de datos. El ViewModel, por otro lado, es complejo, pero tiene pocas dependencias: no importa de dónde proviene el modelo, solo que está allí y no tiene ningún concepto de vista, lo que lo hace muy comprobable (el la lógica de su aplicación no depende de una IU para probar). Finalmente, el xaml está bien compartimentado y puede ser entregado a un diseñador que no necesita saber nada sobre la lógica de la aplicación, solo que ViewModel presentará ciertos datos bajo ciertos nombres. Esta encapsulación hace que sea muy fácil definir roles en proyectos grandes, o armar una interfaz de usuario limitada para probar la lógica mientras se está puliendo la real.
1 Jaja. Un desarrollador de software clásico.Usted le dio al usuario exactamente lo que pidió, pero resulta que no lo benefició en absoluto y probablemente no es lo que realmente quería. (Me hizo reír) = :) –