Bases para MVVM y SQLite.  

Requerimientos  

    • Windows 8 
    • Visual  Studio 2012 
Conociendo de MVVM 
Comenzare dando el reconocimiento al creador de  Modelo-Vista-ViewModel  o conocido como MVVM Light toolkit Laurent Bugnion. Hoy en día así como yo, hay  muchos otros desarrolladores, que han estado usando el patrón MVVM para aplicación basadas en WPF, Silverlight y ahora Metro Style. 
 Lo que se pretende en este blog es dar una aportación del conocimiento sobre esta arquitectura , y llevar el conocimiento de MVVM con la esperanza de que hay mejoras para el desarrollo de App para Metro Style 
MVVM Light Toolkit V4 RTM es el instalador más reciente para Windows 8, está disponible en CodePlex.  Según el blog de ​​Laurent es una instalación paso a paso como las versiones anteriores. Solo se tiene que descargar y ejecutar el MSI desde CodePlex y como es habitual seguir los pasos y dar siguiente hasta el final de la instalación o en su defecto instalarlo desde Visual Studio 2012 con la consola Package Manager Console y ejecutar el comando Install-Package-MvvmLight. 
Antes de comenzar con el desarrollo de la app voy a dar una breve descripción del MVVM  es un derivado de Model-View-Controller (MVC) donde los puntos potenciales de esta arquitectura se aprovechan en Windows Presentation Foundation (WPF), Silverlight y ahora aplicaciones  Metro Style. 
La arquitectura se basa en separar el Modelo (Model) y la Vista (View) mediante la introducción de una capa de abstracción entre ellos: un modelo "de la vista" o conocido como ViewModel 
    • El modelo (Model). Es responsable de todos los datos de la aplicación y de la lógica de negocios relacionada. 
    • La vista o vistas(View).  Es responsable de manipular y mostrar los eventos, animaciones y  datos al usuario, en otras palabras la vista es responsable de las acciones a mostrar para la interacción con el usuario, así como  de permitir la manipulación de los datos de la aplicación. 
    • El modelo-vista (ViewModel).  Es responsable de implementar el comportamiento de la vista para responder a las acciones del usuario mediante métodos, comandos y otros puntos de acceso que ayudan a mantener el estado de la vista, y de exponer los datos del modelo de forma tal que sea fácil usar bindings en la vista. 
Preparación de las herramientas a utilizar : Instalación de MVVM y SQLite. 
Para efectos de este desarrollo se van a instalar MVVM  desde Manage Nuget Package y SQLite agregándolo como referencia del proyecto 
    • Para  MVVM  se deben de seguir los siguientes pasos:  
    • Abrir Visual Studio 2012  
    • Generar el proyecto denominado NotasRapidas  
    • Ir a Tools>>Library Package  Manager >> Package Manager Console.  Como se muestra a continuación: 
Imagen 
  1. En la consola de Package Manager Console poner después del prompt PM> la instrucción Install-Package-MvvmLight 
Imagen 
  1. Se debe  de agregar las plantillas de MVVM a Visual Studio 2012. 
Imagen 
  • Para realizar la instalación de SQLite se deben de realizar los siguientes pasos: 
  1. Situarse sobre Referencias >> Dar clic derecho >> Seleccionar Agregar Referencia. 
  2. Se abrirá una ventana en la cual del lado derecho se debe de poner la referencia a ser agregada, en este caso sqlite. Como se muestra a continuación:  
Imagen 
  1. Adicionalmente debes de descargar la librería (dll) de la pagina de SQLite 
Imagen 
  1. Al terminar la descarga copia la librearía (dll) al proyecto. 
Al concluir con las instalaciones se debe de crear carpetas para organizar el proyecto, la estructura del directorio debe de quedar de esta forma:  
Desarrollando Notas Rápidas (Sticky notes) 
Como objetivo de desarrollo se plantea el tener una Nota Rápida que contenga los elementos básicos como lo son el titulo, fecha y la nota, el diseño de la Nota Rápida  va a ser de la siguiente manera 
Imagen 
Antes de comenzar con el desarrollo se debe de comenzar con la estructura de la base de datos. la cual debe de tener una estructura similar a esta: 

Imagen 
Para crear las tablas de la base de datos en SQLite que se van a utilizar en la aplicación Metro Style de Notas Rápidas, se pueden considerar  dos formas: 
Nota: Antes de comenzar a desarrollar la clase es importante primero leer estas dos formas para saber por cual forma se va a elegir para el desarrollo.
LA PRIMERA FORMA, es tener una clase para cada tabla que se quiera crear, las propiedades de la clase se tienen que dirigir a algunos atributos propios de SQLite para que al momento de generarlos la biblioteca sepa como construirlos. Para ejemplificar, se va a construir la clase para la TablaNota: 
Imagen   
En este ejemplo se ve como algunos atributos de SQLite se utilizan en las propiedades de la clase, para clarificar cada uno : 
PrimaryKey. Se utiliza para especificar que la columna será la clave principal de la tabla. AutoIncrement.  Por lo general se utiliza en pareja con una clave principal, y cuando esta opción está activada, el valor de esta columna es un número que se incrementa automáticamente cada vez que se inserta una nueva fila en la tabla. MaxLength. Se puede utilizar con las propiedades de cadena para especificar el número máximo de caracteres que serán almacenados en la columna. 
Después de haber definido la tabla, es el momento de crear la base de datos. Como se sabe el desarrollo de aplicación Metro Style se basa en lo posible en un patrón asynchrnous, de tal forma que  se tiene que utilizar la versión asíncrona de sqlite-net. 
Para crear la base de datos, se va a crear una clase con el nombre de BDManager,  la cual contendrá la ruta de conexión y métodos para la manipulación de las notas rápida.  
La clase BDManager, inicialmente debe de contener esta estuctura para la creacion de la base de datos y las tablas:  
Imagen 
El método GetConnection. Devuelve de forma asíncrona la ruta donde se encuentra la base datos. 
Donde:  
DatabaseName. Es el nombre de la base de datos. 
_Path. Es la ruta donde se va encontrar la base de datos. 
SQLiteAsyncConnection. Genera la base de datos en la ruta _path. 
El método CreateDataTable. Sirve para crear la tabla en la base de datos de forma asyncrona. 
Donde:  
conn. Es el objeto de la conexión a la base de datos.  
CreateTableAsync<>. Es el método para crear la tabla de forma asíncrona. 
TablaNota. Es la clase que utiliza el método asíncrono para la construcción de la tabla.  
await. Es un metodo Promise. 
En este punto es donde se va a clarifica LA SEGUNDA FORMA,  la cual consiste en vez de generar la tabla utilizando la clase para la creación de esta, con la instrucción:  
await conn.CreateTableAsync<TableImage>(); 
Se utili la instrucción:  
 await conn.ExecuteAsync("CREATE TABLE TableImage (IdImage INTEGER PRIMARY KEY, Archivo VARCHAR(120000), IdNota INTEGER);"); 
con la cual no se genera ninguna clase de por medio y se utiliza una sentencia SQL, para la creación de la tabla. 
Dentro de esta misma clase de BDManager se va a continuar con la creación de los métodos que nos van a Crear, Devolver y Eliminar las notas: 

Imagen 
Método asíncrono para Crear una Nota Rápida.

Imagen 
Método asíncrono para Retornar una Lista de Notas Rápidas.

Imagen 
Método asíncrono para Eliminar una nota rápida.

Hasta este momento solo se tiene creada la base de datos,  las tablas y la clase que administrara los métodos para guardar, eliminar y seleccionar todas las notas,  ya nos encontramos en la parte del Model para la Aplicación.
La publicación de la Parte II, la cual consistirá en la construcción de la aplicación con la arquitectura de MVVM y la interacción con la base de datos bajo el esquema de MVVM.