A ApplicationBar disponível para utilização no desenvolvimento de aplicações para Windows Phone foi desde o primeiro dia uma grande dor de cabeça para os programadores, pelo simples facto de este controlo não ser um FrameworkElement.
Quer isto dizer que não é possível aplicar Styles ou Templates à ApplicationBar, e mais importante ainda, não é possível fazer Binding das suas propriedades, algo que complica e muito quem quer utilizar uma arquitectura baseada em MVVM!
É certo que a arquitectura MVVM não é completamente fechada e limitada, e como tal existem alternativas para ultrapassar este problema (por exemplo, esta e esta)!
No meu caso, de forma a poder utilizar a Application Bar nas minhas aplicações de uma forma mais “MVVM’ed”, criei o ApplicationBarBehavior que podem encontrar no Cimbalino Windows Phone Toolkit!
Este Behavior, quando aplicado no elemento LayoutRoot de uma PhoneApplicationPage, permite criar e manter uma Application Bar com propriedades Bindable de forma a manter uma arquitectura MVVM mais consistente.
Para melhor explicar, nada como um exemplo:
<!-- Restante código -->
<Grid x:Name="LayoutRoot" Background="Transparent">
<i:Interaction.Behaviors>
<cimbalino:ApplicationBarBehavior>
<cimbalino:ApplicationBarIconButton Command="{Binding AddItemCommand, Mode=OneTime}" IconUri="/Images/appbar.add.rest.png" Text="add" IsVisible="{Binding IsSelectionDisabled}" />
<cimbalino:ApplicationBarIconButton Command="{Binding EnableSelectionCommand, Mode=OneTime}" IconUri="/Images/appbar.manage.rest.png" Text="select" IsVisible="{Binding IsSelectionDisabled}" />
<cimbalino:ApplicationBarIconButton Command="{Binding DeleteItemsCommand, Mode=OneTime}" CommandParameter="{Binding SelectedItems, ElementName=ItemsMultiselectList}" IconUri="/Images/appbar.delete.rest.png" Text="delete" IsVisible="{Binding IsSelectionEnabled}" />
</cimbalino:ApplicationBarBehavior>
</i:Interaction.Behaviors>
<!-- Restante código -->
</Grid>
<!-- Restante código -->
No excerto de código acima podemos ver o ApplicationBarBehavior com uma série de controlos ApplicationBarIconButton (tal como seria feito normalmente), e rapidamente nos apercebemos de algumas novas propriedades como o Command, CommandParameter, e IsVisible (algo que não encontramos de base na ApplicationBar do Windows Phone); apesar de neste exemplo isso não ser visível, também as propriedades Text e IconUri são Bindable!
Para melhor explorarem o ApplicationBarBehavior, proponho que façam download do código completo do Cimbalino Windows Phone Toolkit do GitHub, e depois executem a solução BindableApplicationBar que encontram na pasta “samples”.