Patrón de Diseño: Model View ViewModel (I)

logo

Introducción

El patrón de diseño Modelo Vista VistaModelo es usado por las tecnologías Windows Presentation Foundation, Silverlight y Moonlight. Es un patrón de interfaz de usuario como lo son Modelo Vista Controlador o Modelo Vista Presentación. En este post vamos a ver su uso en WPF/Silverlight/Moonlight.

El patrón MVVM

El patrón MVVM e compone de 3 elementos:

  1. El Modelo es la entidad que representa el concepto de negocio, puede ser cualquier cosa desde una entidad usuario hasta una entidad compleja de almacenaje (que contiene a su vez otras entidades).
  2. La Vista es la representación gráfica del control o un conjunto de controles que muestran el Modelo de datos en pantalla. Una vista puede ser desde un ventana de WPF, una página con Silverlight o una plantilla de un control de datos en XAML. La Vista es un observador (Observer) de la VistaModelo, tan pronto cambie la VistaModelo la interfaz de usuario se actualiza, para esto debe implementar el interfaz INotifyPropertyChanged e implentar el evento PropertyChanged.
  3. La VistaModelo es la que une todo. Contiene la lógica del interfaz de usuario, los comandos, los eventos y una referencia al Modelo. En MVVM, la VistaModelo no se encarga de actualizar los datos mostrados por el interfaz de usuario.

Proyecto en Moonlight bajo MonoDevelop

MonoDevelopLogo

Nota: la librería Moonlight no está disponible directamente para su uso cuando inicias un proyecto Moonlight en MonoDevelop, hay que obtenerla compilando el proyecto Mono, para más información recomiendo la lectura del enlace [2].

Creando la solución

Seleccionamos el menú Archivo|Nuevo|Solución, en la Ventana de Nueva Solución picamos en C# y posteriormente en Moonlight, teniendo dos posibles opciones:

  1. Librería de Controles: una librería con controles XAML sin ejecutables.
  2. Aplicación: una aplicación con un punto de entrada de ejecución.

Agregando las referencias

Para solventar la incidencia de las referencias bajo Windows, puedes utilizar tu instalación de Silverlight disponible en la ruta “C:\Archivos de programa\Microsoft SDKs\Silverlight\v2.0\Reference Assemblies”si tienes instalada la versión 4 o cualquier otra posterior a la 2 saldrá un mensaje de error informándote que requiere Moonlight 3 o Silverlight 2.

Tendrás que eliminar las referencias que vienen por defecto en el proyecto, e insertar las nuevas utilizando el apartado de Ensamblados .Net. Quedando las referencias como siguen:

silverlight_referencias

Pero…

Seguimos sin poder compilar debido a que surge un mensaje de error que nos dice lo siguiente:

Error: Framework ‘Silverlight 2.0’ not installed. (EjemploMoonlight)

Sin embargo si está instalado el SDK, una vez navegas por el foro de Mono te encuentras con que no está implementado el backend para proyectos Silverlight, y alguien debería hacerlo [1]:

Ideally someone would implement a SilverlightFrameworkBackend for the
DotNetTargetRuntime, so that MD could find the Silverlight SDK
assemblies. This would be very easy, but I don’t have time to do it
myself right now.

Editando el complemento Moonlight para MonoDevelop

Es necesario bajarse el código fuente de MonoDevelop de GitHub que parece la versión más actualizada del proyecto y preparar el entorno de desarrollo para Windows.

Pero eso será otra historia.

Bibliografía:

Building Enterprise Applications with Windows Presentation Foundation and the MVVM – Raffaelo Garofalo – Microsoft Press – ISBN 978-0-735-65092-3

Enlaces

[1] – http://go-mono.com/forums/#nabble-td1508851

[2] – http://go-mono.com/forums/#nabble-td2323130

Imagen Logo Moonlight: http://www.go-mono.com/moonlight/

Imagen Logo MonoDevelop: http://www.monodevelop.com