J'aime MVVM. Je n'ai pas l'amour, mais comme lui. La plupart de cela a du sens. Mais, je continue à lire les articles que vous encourager à écrire beaucoup de code, de sorte que vous pouvez écrire XAML et ne pas avoir à écrire du code dans le code-behind.
Laissez-moi vous donner un exemple.
Récemment, j'ai voulu le raccordement d'une commande à mon ViewModel pour une ListView MouseDoubleClickEvent. Je n'étais pas tout à fait sûr de savoir comment le faire. Heureusement, Google a les réponses à tout. J'ai trouvé les articles suivants:
- http://blog.functionalfun.net/2008/09/hooking-up-commands-to-events-in-wpf.html
- http://joyfulwpf.blogspot.com/2009/05/mvvm-invoking-command-on-attached-event.html
- http://sachabarber.net/?p=514
- http://geekswithblogs.net/HouseOfBilz/archive/2009/08/27/adventures-in-mvvm-ndash-binding-commands-to-any-event.aspx
- http://marlongrech.wordpress.com/2008/12/13/attachedcommandbehavior-v2-aka-acb/
Alors que les solutions ont été utile dans ma compréhension de commandes, il y avait des problèmes. Certaines de ces dispositions rendu le concepteur WPF inutilisable en raison d'un commun hack ajoutant "Interne" après une propriété de dépendance; le concepteur WPF ne pouvez pas le trouver, mais le CLR peut. Certaines solutions ne permettent pas de plusieurs commandes à la même commande. Certaines solutions ne permettent pas de paramètres.
Après avoir expérimenté pendant quelques heures, j'ai simplement décidé de faire ceci:
private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e) {
ListView lv = sender as ListView;
MyViewModel vm = this.DataContext as MyViewModel;
vm.DoSomethingCommand.Execute(lv.SelectedItem);
}
Donc, MVVM les puristes, s'il vous plaît dites-moi ce qui ne va pas? Je peux encore l'Unité de test de ma commande. Cela semble très pratique, mais il semble enfreindre la ligne directrice de "ZOMG... vous avez le code dans votre code-behind!!!!" Merci de partager vos pensées.
Merci à l'avance.