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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
Avez-vous une astuce ? Peut-être en utilisant le Messenger de MVVM Light Toolkit ?
Merci d'avance.
Partager