WP7nl: una libreria per estendere la BindableApplicationBar

Print Content | More

Se ricordate qualche tempo fa vi ho parlato della BindableApplicationBar, un controllo che va a sostituire l’Application Bar originale e che supporta il binding e i command. Questo controllo facilita l’implementazione del pattern MVVM: con la Application Bar standard infatti siete costretti a “rompere” il pattern, dato che l’unico modo per accedere alla Application Bar è dal code behind della view.

Nell’articolo precedente non vi ho detto però che la BindapleApplicationBar ha un difetto: la proprietà IconUri, che identifica l’icona associata al pulsante, non è una dependency property. Questo significa che non è possibile metterla in binding con una proprietà di tipo Uri e quindi far si che l’icona cambi, ad esempio, in seguito ad un evento.

Si tratta di una casistica che può capitare frequentemente: recentemente ho sviluppato due applicazioni che supportavano la possibilità di salvare un’informazione come preferita. Tale funzionalità era associata proprio ad un pulsante nella Application Bar presente nella pagina di dettaglio: la mia necessità era perciò quella di far variare l’icona, in modo che riflettesse lo stato “salvato / non salvato nei preferiti”. Il pulsante, infatti, serviva a gestire due comportamenti diversi: se l’informazione non era salvata nei preferiti, il pulsante serviva per aggiungerla; viceversa, se non era salvata nei preferiti doveva servire per rimuoverla.

A gestire questa casistica in maniera molto intelligente ci viene in aiuto una libreria, chiamata WP7nl, sviluppata da Joost van Schaik, sviluppatore olandese a cui vanno le mie congratulazioni per la recente nomina a MVP nella categoria Windows Phone Development!

Questa libreria, tra le altre cose, espone una serie di dependancy property da utilizzare proprio in combinazione con la BindableApplicationBar:

  • ShowAlernateIconUri: è una proprietà di tipo booleano che ci permette di definire lo stato dell’icona.
  • IconUri: è l’URL dell’icona che viene mostrata quando la proprietà ShowAlernateIconUri è impostata a false.
  • AlernateIconUri: è l’URL dell’icona che viene mostrata quando la proprietà ShowAlernateIconUri è impostata a true.

Attenzione! Il fatto che abbia scritto la parola Alernate invece di Alternate non è un mio errore ma è voluto: per un refuso, infatti, la dependancy property si chiama propriò così. Verrà comunque corretto nelle prossime versioni.

A questo punto, ci basta impostare le due icone nelle proprietà IconUri e AlernateIconUri e, nel nostro ViewModel, creare una proprietà di tipo booleano da mettere in binding con ShowAlernateIconUri. Quando avremo bisogno di far variare l’icona, ci basterà cambiare il valore di tale proprietà.

Vediamo un esempio di BindableApplicationBar con le proprietà aggiuntive:

<AppBar:BindableApplicationBarIconButton Command="{Binding Path=SaveToFavourites}" 
Text="{Binding Path=FavouriteText}" 
wp7nl:AppBarIconFlipper.IconUri="/Assets/Images/Icons/favs.addto.png"
wp7nl:AppBarIconFlipper.AlernateIconUri="/Assets/Images/Icons/favs.remove.png"
wp7nl:AppBarIconFlipper.ShowAlernateIconUri="{Binding Path=IsFavorite}" />

Per usarla, dovete prima definire il namespace della libreria (in questo caso, associato al prefisso wp7nl):

xmlns:wp7nl="clr-namespace:Wp7nl.Utilities;assembly=Wp7nl"

IsFavorite è una proprietà di tipo booleano: quando viene impostata a false, verrà visualizzata l’icona impostata come IconUri; quando viene impostata a true, verrà visualizzata l’icona impostata come AlernateIconUri.

Semplice ed efficace!

Potete trovare la libreria WP7nl su NuGet oppure scaricarla dalla pagina ufficiale su Codeplex.


Windows Phone , Microsoft , BindableApplicationBar , Wp7nl

0 comments

Related Post


(will not be published)
(es: http://www.mysite.com)