Cimbalino Windows Phone Toolkit

Introducción

En el desarrollo de una aplicación tenemos que
tener en cuenta muchos factores, su contenido, su diseñoo su usabilidad
entre otros factores. Pero por debajo de todo eso hay una base aun mas
importante, el código. Como desarrolladores tenemosque esforzarnos por
realizar un código de calidad acompañado de test y realizando un
esfuerzo en cumplir buenas practicas con el objetivo en mente de tener
un código facilmente ampliable, fácil de testear e incluso porque no,
fácil de portar a otras plataformas. Sin embargo, en el proceso a este
fin nos encontramos con piedras innecesarias en el camino. En el
desarrollo de una aplicación Windows Phone siguiendo elpatrón MVVM entre
otras buenas prácticas nos encontramos con que el ApplicationBar no
soporta bindings, el LongListSelector tampoco en su elemento
seleccionado, etc.

¿Y si pudieramos tener las cosas más fáciles?

Cimbalino Windows Phone Toolkit

Con
ese objetivo en mente llega Cimbalino. Es un completo conjunto de
herramientas destinadas a ahorrarnos tiempo y esfuerzo al desarrollar
aplicaciones para Windows Phone.

El Toolkit esta dividido en proyectos:

  • Cimbalino.Phone.Toolkit:
    Base del Toolkit, contiene los servicios base del patrón MVVM,
    converters, helpers y metodos extensores además de la bindable
    Application Bar.
  • Cimbalino.Phone.Toolkit.Background: Servicios para los background agents compatibles con MVVM.
  • Cimbalino.Phone.Toolkit.Camera: Servicios para acceder a la cámara compatibles con MVVM.
  • Cimbalino.Phone.Toolkit.Controls: Controles (se necesita el Windows Phone Toolkit).
  • Cimbalino.Phone.Toolkit.DeviceInfo: Servicios para acceder a la información del dispositivo compatibles con MVVM.
  • Cimbalino.Phone.Toolkit.Location: Servicios para utilizar la localización compatibles con MVVM.
  • Cimbalino.Phone.Toolkit.MediaLibrary: Servicios para acceder a la librería Media compatibles con MVVM.
  • Cimbalino.Phone.Toolkit.PhoneDialer: Servicios para acceder a las funciones del teléfono compatibles con MVVM.
  • Cimbalino.Phone.Toolkit.UserInfo: Servicios para acceder a la información del usuario compatibles con MVVM.

NOTA: El Toolkit es compatible con Windows Phone SDK 7.1.x y Windows Phone 8.0.

Instalando el Toolkit

El Toolkit lo tenemos disponible en NuGet por lo que podemos instalarlo usando Nuget Package Manager.

En las referencias del proyecto hacemos clic derecho y seleccionamos la opción Manage NuGet Packages …

En la ventana modal que nos aparece, en la parte superior derecha donde podemos realizar una búsqueda, buscamos por “cimbalino”:

NOTA: La primera opción
incluye el Toolkit al completo. Sin embargo, como podemos apreciar en
la captura anterior, podemos descargar por partes, solo aquellos
componentes que nos interesen.

Seleccionamos el primero de los elementos y pulsamos el botón Install.
Tras un breve periodo donde se procede a descargar e incluir las
librerías en las referencias del proyecto, tendremos el siguiente
resultado:

Contenido

Acciones

  • BingMapsAction
  • BingMapsDirectionsAction
  • ClipboardAction
  • ConnectionSettingsAction
  • EmailComposeAction
  • Etc

Behaviors

  • ApplicationBarBehavior
  • MultiApplicationBarBehavior
  • SafeBehavior
  • Etc

Converters

  • BooleanToBrushConverter
  • BooleanToIntConverter
  • BooleanToStringConverter
  • BooleanToVisibilityConverter
  • NegativeBooleanConverter
  • Etc

Extensiones

  • ByteArrayExtensions
  • DependencyObjectExtensions
  • DispatcherExtensions
  • EnumExtensions
  • FrameworkElementExtensions
  • Etc

Helpers

  • ApplicationManifiest
  • MutexLock
  • NamescopeBinding
  • Etc

Servicios

  • AddressChooserService
  • ApplicationLifecycleService
  • ApplicationManifestService
  • ApplicationProfileService
  • ApplicationSettingsService
  • AsyncStorageService
  • BingMapsService
  • 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

Lo utilizamos!

vamos a crear una Aplicación de ejemplo para utilizar y ver superficialmente las posibilidades del Toolkit:

Creamos un proyecto desde la plantilla más básica para concentrar nuestra atención en el Toolkit que nos ocupa en esta entrada.

El ApplicationBar de Windows Phone, desde sus orígenes, es un objeto que no deriva de la clase FrameworkElement.
Esto quiere decir que no soporta estilos o plantillas pero lo que es
más importante, tampoco soporta binding en sus propiedades. Esto provoca
problemas al trabajar utilizando el patrón MVVM, no podemos acceder
directamente a los comandos de la ViewModel establecida como DataContext
de la página.

Del listado anterior de contenido ya hemos visto que hay behaviors
para el ApplicationBar que nos ayudan a resolver este problema con suma
facilidad.

Vamos a utilizar el behavior. Para utilizarlo, lo primero que debemos hacer es añadir dos namespaces en nuestra vista:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cimbalinoBehavior="clr-namespace:Cimbalino.Phone.Toolkit.Behaviors;assembly=Cimbalino.Phone.Toolkit"

A continuación, definimos el behavior:

<i:Interaction.Behaviors>
     <cimbalinoBehavior:ApplicationBarBehavior>
          <cimbalinoBehavior:ApplicationBarIconButton
               Text="{Binding LocalizedResources.Message, Source={StaticResource LocalizedStrings}}"
               IconUri="../Toolkit.Content/ApplicationBar.Check.png"
               Command="{Binding ShowMessageCommand}"/>
          <cimbalinoBehavior:ApplicationBarBehavior.MenuItems>
               <cimbalinoBehavior:ApplicationBarMenuItem
                    Command="{Binding ShowMessageCommand}"
                    Text="{Binding LocalizedResources.Message, Source={StaticResource LocalizedStrings}}"/>
          </cimbalinoBehavior:ApplicationBarBehavior.MenuItems>
     </cimbalinoBehavior:ApplicationBarBehavior>
</i:Interaction.Behaviors>

NOTA: El behavior puede aplicarse directamente a
un PhoneApplicationPage o a su elemento LayoutRoot (principal) para
conseguir una ApplicationBar bindeable permitiendo mantener la
consistencia en el patrón MVVM.

Podemos además de bindear el comando a ejecutar al pulsar el botón,
los textos e incluso una propiedad para controlar la visibilidad.

El comando a ejecutar a su vez puede aprovechar cualquiera de los
servicios que vimos previamente en el listado anterior. En nuestro
ejemplo, bastará con añadir la dependencia en nuestro Ioc:

_container.RegisterType<IMessageBoxService, MessageBoxService>();

Definirlo en el constructor de nuestra ViewModel:

private readonly IMessageBoxService _messageBoxService;
 
public MainViewModel(IMessageBoxService messageBoxService)
{
     _messageBoxService = messageBoxService;
}

Y por último, utilizarlo directamente:

private ICommand _showMessageCommand;
 
public ICommand ShowMessageCommand
{
     get { return _showMessageCommand = _showMessageCommand ?? new DelegateCommand(ShowMessageCommandDelegate); }
}
 
public void ShowMessageCommandDelegate()
{
     _messageBoxService.Show(Resources.AppResources.Cimbalino);
}

Como hemos podido ver a lo largo del artículo, Cimbalino es un
completo Toolkit destinado a acelerar y facilitar el desarrollo de
aplicaciones Windows Phone. Muy buenas implementaciones de una gran
cantidad de acciones, helpers, behaviors, etc. que os recomiendo probar.
Podéis descargar el ejemplo realizado del siguiente enlace:

Como hemos podido ver a lo largo del
artículo, el Toolkit es bastante amplio ofreciendo una cantidad de
opciones muy interesantes permitiendo realizar y resolver tareas muy
diversas. Retomaremos en futuras entradas este Toolkit para ver como
notificar de actulizaciones de la aplicación publicada entre otros
aspectos de interes.

Permaneced atentos!

Más información

Deja un comentario

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