nRoute Toolkit


Llevo unos días integrando la nueva versión de nRoute Toolkit con Chronos, para:

Resolver servicios. En la versión de chronos de codeplex se usa Unity + Common Service Locator para resolver los servicios, lo he cambiado para utilizar nRoute, para mapear un servicio en nRoute se utilizan atributos, por ejemplo la clase WindowManager ahora está decorada con el atributo MapService de nRoute

[MapService(typeof(IWindowManager))]
public class WindowManager : DispatcherObject, IWindowManager
{
    ...
}
 
 

Para acceder a la instancia del servicio hay que usar la clase ServiceLocator de nRoute de forma muy similar a como se haría con Common Service Locator

ServiceLocator.GetService<IWindowManager>().ShowWindow(window);
 

Para resolver las navegaciones a las vistas. Está funcionalidad todavía no está incluida en la nueva versión de nRoute, pero tengo una parte de la antigua implementación de los servicios de navegación de nRoute portada a WPF. Al igual que en el caso de los servicios hay que decorar la clase con atributos para definir la navegación que le corresponde y el ViewModel que tiene asociado.

[MapView(typeof(EmpresasViewModel))]
[MapNavigationContent(NavigationUrl.Empresas, "Ficha de la Empresa")]
public partial class EmpresaView : WindowElement
{
    public EmpresaView()
    {
        InitializeComponent();
    }
}
 
NavigationUrl.Empresas es una constante con la “url “ de navegación de la vista:
 
public const string Empresas = "Configuracion/Empresas";
 
Para que nRoute “inyecte” en tiempo de ejecución una instancia del ViewModel indicado en el DataContext de la Vista es necesario utilizar el “behavior” BridgeViewModelBehavior de nRoute en la definición de XAML de la vista (para poder utilizar los “behaviors” es necesario tener instalado el Expression Blend SDK).
 
<i:Interaction.Behaviors>
    <
nrbehaviors:BridgeViewModelBehavior x:Name
=”ViewModelBridgeBehavior” />
</
i:Interaction.Behaviors
>

 
Por el momento sólo utilizo nRoute para resolver la navegación la vista se visualiza utilizando el WindowManager de Chronos.
 

public void NavigateTo(string target)
{
    Application.Current.Dispatcher.BeginInvoke(
        DispatcherPriority.Normal,
        new ThreadStart(
delegate
           
{
                nRoute.Navigation.NavigationResponse response = nRoute.Navigation.NavigationService.Resolve(
                    new nRoute.Navigation.NavigationRequest(target, nRoute.Navigation.NavigateMode.New));

                if (response.Status == nRoute.Routing.ResponseStatus.Success)
                {
                    ServiceLocator.GetService<IWindowManager>().ShowWindow(response.Content as WindowElement);
                }
            }));
}

Para mostrar diálogos de confirmación (MessageBox). De momento sólo lo he utilizado, a modo de prueba, para confirmar el borrado de los accesos directos

IShowMessageViewService showMessageService = ViewServiceLocator.GetViewService<IShowMessageViewService>();

showMessageService.ButtonSetup  = MessageBoxButton.YesNo;
showMessageService.Caption      = "Aviso";
showMessageService.Text         = "¿Está seguro de que desea eliminar el acceso directo?";

if (showMessageService.ShowMessage() == MessageBoxResult.Yes)
{
    ServiceLocator.GetService<IElementManager>().CloseElement(this.Id);
}
 
Así es como se ve una vez visualizado (por el momento no tiene un estilo personalizado)
 

image

 

A medida que vaya aprendiendo el funcionamiento de nRoute iré utilizándolo para algunas cosas más, se puede encontrar más información sobre nRoute aquí.

 

Y como siempre un pantallazo.

image


Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s