Buscando en la red encontré un framework de desarrollo de aplicaciones basado en el patron de diseño Model-View-ViewModel


Me atrajo su simpleza (de diseño, por q por adentro es algo complicado), y ademas es bastante completo, al descargarlo tiene un documento adjunto de como usarlo para implementar nuestras propias aplicaciones pero aca les muestro como añadir una ventana
link: Chronos
una ves descargado instalamos la extencion Chronos.VisualStudio.Extensions.vsix, luego abrimos el proyecto y nos encontramos con la siguiente estructura en el explorador de soluciones.
en la carpeta Views del proyecto Chronos.Modules.Sample damos clic derecho -> agregar -> nuevo elemento y buscamos Chronos Workspace Window
una ves echo eso nos crea la siguiente pantalla basica
con el siguiente codigo por debajo

antes de modificar esto nos dirigimos al proyecto Chronos.Modules.Navigation mas especificamente a la clase NavigationRoutes.cs la cual luce de la siguiente forma
justo debajo de la linea:
agregamos la siguiente :public const string Companies = "Configuracion/Empresas";
esta linea es una constante que almacena la ruta de navegaciónpublic const string Prueba = "Configuracion/Prueba";
ahora volvemos a VentanaPrueba.xaml.cs donde agregamos dos usings
using Chronos.Modules.Navigation;
using Chronos.Modules.Sample.ViewModels;
luego cambiamos las lineas
[MapNavigationContent("WindowNavigationRoute"]
[DefineViewViewModel(typeof(VentanaPrueba), typeof(VentanaPruebaViewModel))]
por las siguientes
[MapNavigationContent(NavigationRoutes.Prueba)]
[DefineViewViewModel(typeof(VentanaPrueba), typeof(VentanaPruebaModel))]
si compilamos ahora nos salta el error:
Error 6 No se puede encontrar el tipo o el nombre de espacio de nombres 'VentanaPruebaViewModel' (¿falta una directiva using o una referencia de ensamblado?) C:UsersCarlosDownloadsChronosv2_0-Beta3-Src_NET4_0Chronosv2sourceModulesSampleViewsVentanaPrueba.xaml.cs 28 56 Chronos.Modules.Sample
lo que quiere decir que nos falta el ViewModel del proyecto, para eso nos dirigimos a la carpeta ViewModel damos clic derecho -> Agregar -> Nuevo Elemento

lo que nos crea lo siguiente

Ahí agregamos los siguientes usings
using System.ComponentModel;
using Chronos.Modules.Navigation;
using Chronos.Modules.Sample.Models;
using Chronos.Presentation.Core.Windows;
tambien la siguiente region
#region · Command Actions ·
protected override void OnInquiryAction(InquiryActionResult<PruebaEntity> result)
{} #endregion
y por ultimo cambiamos la linea:
public sealed class VentanaPruebaModel : WorkspaceViewModel<ModelClass>
por:
public sealed class VentanaPruebaModel : WorkspaceViewModel<PruebaEntity>
y eso es todo lo que hay que modificar en el ViewModel solo nos falta el Model o lo que muchos conocen como entidad, que no es mas que una clase común con unas pequeñas características, asi q nos dirigimos a la carpeta Models del proyecto Chronos.Modules.Sample y damos clic derecho -> agregar -> Nuevo Elemento, y escogemos clase, y le damos el nombre de PruebaEntity.
agregamos el siguiente using:
y cambiamos la cabesera de la clase de:using System.ComponentModel;
class PruebaEntity
a:
class PruebaEntity : INotifyPropertyChanged, IDataErrorInfo
y por ultimo(ahora enserio) agregamos los siguientes metodos en sus respectivas regiones
#region · INotifyPropertyChanged Members ·
public event PropertyChangedEventHandler PropertyChanged;
#endregion
#region · IDataErrorInfo Members ·
public string Error
{ get { return null; }} public string this[string columnName]
{ get { return null; }} #endregion #region · ChangeTracking ·
protected virtual void OnPropertyChanged(String propertyName)
{ if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); }} #endregion
Con todo eso ya deberia compilar a la perfeccion. pero obiamente todavia no podemos acceder a nuestra ventana, para solucionar eso nos dirigimos al proyeccto principal Chronos al archivo App.xaml
y ubicamos el nodo
<nRoute:NavigationNode Title="Configuración general">
..
..
</nRoute:NavigationNode>
justo en medio en alguna parte añadimos la siguiente linea
<chronos:CommandSiteMapNode Title="Prueba" SiteArea="Configuracion" Url="Configuracion/Prueba" />
el parametro Url es el mismo q pusimos en el NavegationRoutes
ahora si ya corre y pueden acceder a la ventana, obviamente no hace nada, pero eso lo dejamos para otro dia


