Mi piace MVVM. Non lo amo, ma mi piace. La maggior parte ha senso. Ma continuo a leggere articoli che incoraggiano a scrivere molto codice in modo da poter scrivere XAML e non dover scrivere alcun codice nel code-behind.MVVM Madness: comandi
Lasciatemi fare un esempio.
Recentemente ho voluto collegare un comando nel mio ViewModel a ListView MouseDoubleClickEvent. Non ero abbastanza sicuro di come farlo. Fortunatamente, Google ha risposte per tutto. Ho trovato i seguenti articoli:
- 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/
Mentre le soluzioni sono stati utili per la mia comprensione di comandi, ci sono stati problemi. Alcune delle suddette soluzioni hanno reso il progettista WPF inutilizzabile a causa di un errore comune di aggiungere "Interno" dopo una proprietà di dipendenza; il progettista WPF non riesce a trovarlo, ma il CLR può. Alcune soluzioni non consentivano più comandi allo stesso controllo. Alcune soluzioni non hanno consentito i parametri.
Dopo aver sperimentato per qualche ora ho deciso di fare questo:
private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e) {
ListView lv = sender as ListView;
MyViewModel vm = this.DataContext as MyViewModel;
vm.DoSomethingCommand.Execute(lv.SelectedItem);
}
Così, i puristi MVVM, prego mi dicono cosa c'è di sbagliato in questo? Posso ancora Unit testare il mio comando. Questo sembra molto pratico, ma sembra violare le linee guida di "ZOMG ... hai il codice nel tuo code-behind !!!!" Per favore condividi i tuoi pensieri.
Grazie in anticipo.
L'ho fatto anch'io, non vedo alcun problema ... – Schneider
CODICE ZOMFG DIETRO !!!!!!! – Pierreten
Sono d'accordo con @Schneider: questo ha perfettamente senso. In effetti, il volume del codice idraulico necessario per evitare l'uso del cosiddetto file code-behind mi fa girare la testa. –