[MVVM Light] Relayer un click au ViewModel via Locator
Bonjour à tous,
Je me mets petit à petit à Silverlight et MVVM et j'ai besoin de vos lumières.
Je développe une petite application WP7 et rencontre une difficulté à utiliser MVVM Light et le pattern Service Locator. Cette difficulté est plus inhérente à MVVM qu'à WP7.
J'ai une ApplicationBar dans une Page :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| <phone:PhoneApplicationPage
...
DataContext="{Binding PivotPage, Source={StaticResource Locator}}">
<Grid>...</Grid>
<phone:PhoneApplicationPage.ApplicationBar>
<shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
<shell:ApplicationBarIconButton x:Name="appbar1" IconUri="..." Text="1"
Click="ApplicationBarMenuItemClick" />
</shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar> |
Le contrôle ApplicationBarIconButton n'a pas de propriété Command. Je ne peux donc Binder la commande de mon ViewModel. Il faut donc utiliser l'évènement Click (cf le billet de Laurent Bugnion à ce sujet), comme ceci :
Code:
1 2 3 4 5 6 7 8
| private void ApplicationBarMenuItemClick(object sender, System.EventArgs e)
{
var vm = DataContext as PivotViewModel;
if (vm != null)
{
vm.MyCommand.Execute(null);
}
} |
Jusque là pas de problème. Là où ça se complique c'est dans l'utilisation du pattern Service Locator : ma View ne connait pas et ne doit pas connaître le ViewModel attaché. La solution de facilité reviendrait à coupler la View au ViewModel, mais ça n'est pas propre.
Avez-vous une astuce ? Peut-être en utilisant le Messenger de MVVM Light Toolkit ?
Merci d'avance.