[Windows Phone 8] Cimbalino Toolkit: ApplicationBar y Servicios

Hola a todos!

Un gran activo del desarrollo en Windows Phone son los toolkits, desarrollados por miembros de la comunidad para facilitar ciertas tareas del desarrollo. Entre muchos, los más conocidos son el Windows Phone Toolkit o el Coding4Fun Toolkit. Pero hoy quiero hablaros de otro más, desarrollado por Pedro Lamas, Senior Engineer en Nokia y activo miembro de la comunidad Windows Phone.

En concreto, este toolkit se llama Cimbalino Windows Phone Toolkit e incorpora ciertas utilidades que nos harán la vida mucho más fácil: Una ApplicationBar con soporte para enlace de datos, acceso a información del dispositivo, cámara, localización, librería multimedia o información del usuario. Todo compatible con MVVM, de forma que podamos acceder a estos servicios desde nuestras ViewModels de una forma sencilla. Además, me gusta mucho la última incorporación a este Toolkit, un servicio llamado IMarketplaceInformationService que nos ayudará a saber si existe una nueva versión de nuestra aplicación publicada, con lo que podremos avisar al usuario para que se la descargue, incluso dirigiéndole directamente a la página del marketplace de nuestra aplicación.

Por todo esto quiero empezar esta serie de artículos sobre este útil toolkit, que nos sacará de más de un apuro y hará nuestra tarea de desarrollo más sencilla. Espero que disfrutéis con el tanto como yo.

Empezando

Por supuesto el primer paso es añadir Cimbalino WP Toolkit a nuestra aplicación. Es muy sencillo, solo necesitamos usar el gestor de paquetes de NuGet y buscar el texto “Cimbalino.Phone” con lo que obtendremos varios componentes diferentes para elegir:

image

En primer lugar encontramos el toolkit completo (Cimbalino Windows Phone Toolkit) pero, y es algo que me encanta de este toolkit, también podemos descargar por separado solo las porciones que nos interesen: los componentes de información de usuario o dispositivo, los de cámara, los controles… de esta forma nos aseguramos de no tener referencias que realmente no necesitamos.

Para este caso, que queremos darle un repaso a distintas partes del toolkit, vamos a instalar el primero de todos, “Cimbalino Windows Phone Toolkit” de esta forma tendremos acceso a todos los componentes de este kit.

ApplicationBar

Uno de los grandes dolores de cabeza a la hora de crear una aplicación Windows Phone usando el patrón MVVM es la ApplicationBar. Al tratarse de un componente nativo, no tiene acceso al sistema de enlace a datos del resto de elementos de la página, por lo que nos vemos obligados a usar Code Behind. Al final, acabamos accediendo a la ViewModel instanciada en el DataContext para ejecutar los comandos que deberíamos poder enlazar a la ApplicationBar.

Pues esta es la primera mejora que nos encontramos en Cimbalino. Incluye un behavior que podemos aplicar sobre el elemento principal de la página, la grid LayoutRoot por defecto, para definir una barra de aplicación con enlace a datos. Para ello tendremos que incluir en la página los namespaces System.Windows.Interactivity y Cimbalino.Phone.Toolkit.Behaviors:

xmlns:bAppBar=“clr-namespace:Cimbalino.Phone.Toolkit.Behaviors;assembly=Cimbalino.Phone.Toolkit”
xmlns:i=“clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity”

A continuación, podremos usar el behavior ApplicationBarBehavior sobre nuestro elemento principal de la página, en este caso un Grid:

 

<!–LayoutRoot is the root grid where all page content is placed–>
<Grid x:Name=“LayoutRoot” Background=“Transparent”>
    <i:Interaction.Behaviors>
        <bAppBar:ApplicationBarBehavior>
            <bAppBar:ApplicationBarIconButton Text=”{Binding LocalizedResources.AppBarButton, Source={StaticResource LocalizedStrings}}
                                                IconUri=“Assets/favs.png”
                                                Command=”{Binding ButtonCommand}/>
            <bAppBar:ApplicationBarBehavior.MenuItems>
                <bAppBar:ApplicationBarMenuItem Command=”{Binding MenuCommand}
                                                Text=”{Binding LocalizedResources.AppBarMenu, Source={StaticResource LocalizedStrings}}/>
            </bAppBar:ApplicationBarBehavior.MenuItems>
        </bAppBar:ApplicationBarBehavior>
    </i:Interaction.Behaviors>
</Grid>

Como podemos ver, no solo podemos usar enlace a datos para la acción a realizar, también podemos usarlo en el texto. Esto es especialmente importante para aplicaciones localizadas en varios idiomas. De esta forma nos hemos ahorrado los eventos en code behind de los menús y botones, pero también el recargar la barra para calcular el idioma. Incluso podemos enlazar una propiedad IsVisible a cada item para controlar cuando mostrarlo y cuando ocultarlo. Desde luego, esto es un Must Have.

Servicios

Cimbalino incluye también servicios que podemos usar out of the box. Localizados en el namespace Cimbalino.Phone.Toolkit.Services, se estructuran como los servicios que he enseñado muchas veces en el blog: Disponen de una interface y una implementación. De esta forma podemos usar IoC para disponer de los servicios que necesitemos en nuestras ViewModels.

En la versión actual, disponemos de los siguientes servicios:

  • AddressChooserService
  • ApplicationLifecycleService
  • ApplicationManifestService
  • ApplicationProfileService
  • ApplicationSettingsService
  • AsyncStorageService
  • ClipboardService
  • ConnectionSettingsService
  • DeviceStatusService
  • EmailAddressChooserService
  • EmailComposeService
  • LauncherService
  • LockScreenService
  • MapDownloaderService
  • MapsDirectionsService
  • MapsServices
  • MarketplaceDetailService
  • MarketplaceHubService
  • MarketplaceReviewService
  • MarketplaceSearchService
  • MessageBoxService
  • NavigationService
  • PhoneNumberChooserService
  • SaveAppointmentService
  • SaveContactService
  • SearchService
  • ShareLinkService
  • ShareMediaService
  • ShareStatusService
  • VoiceCommandService
  • WebBrowserService

Como podemos ver, la lista es impresionante. Podemos disponer de toda esta funcionalidad, simplemente añadiendo la dependencia a nuestro IoC, por ejemplo el MessageBoxService:

ContainerBuilder builder = new ContainerBuilder();

builder.RegisterType<MessageBoxService>().As<IMessageBoxService>();
builder.RegisterType<VMMainPage>();

container = builder.Build();

Después lo podemos añadir al constructor de nuestra ViewModel:

public VMMainPage(IMessageBoxService msgService)
{
    this.msgService = msgService;
            
    this.buttonCommand = new DelegateCommand(this.ButtonCommandExecute);
    this.menuCommand = new DelegateCommand(this.MenuCommandExecute);
}

Y por último lo usamos como cualquier otro servicio:

private void ButtonCommandExecute()
{
    this.msgService.Show(“command from appbar button.”);
}

Así de fácil, tenemos muchas capacidades de Windows Phone 8 ya implementadas en Cimbalino: Mapas, Marketplace, geoposicionamiento, almacenamiento, settings… todo lo que necesitemos, o por lo menos gran parte de lo que necesitemos.

Conclusión

Con esto llegamos al final del primer artículo sobre Cimbalino Toolkit. En el próximo le daremos un repaso a los controles que incorpora Cimbalino para ayudarnos con la interface de usuario. Mientras tanto, aquí os dejo el ejemplo que he usado en este artículo para que juguéis con él.

Un saludo y Happy Coding!

5 comentarios en “[Windows Phone 8] Cimbalino Toolkit: ApplicationBar y Servicios”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *