RoutedCommand e RoutedUICommand hanno molto da offrire. È disponibile il supporto per il testo e i gesti della tastiera. È possibile associare una raccolta di RoutedUICommands a ItemsSource di un menu e crea automaticamente e associa gli elementi del menu. Alcuni comandi (Taglia, Copia, Incolla) sono automaticamente supportati da controlli predefiniti.Qualche framework MVVM che funziona bene con RoutedCommand?
Tuttavia, ogni volta che utilizzo MVVM, ho trovato che i comandi di instradamento sono inadeguati, a causa del codice ripetitivo XAML e del codice che ho scritto per ognuno di essi. Quando eseguo MVVM, di solito mi sono ritrovato a utilizzare RelayCommand anziché i comandi indirizzati. Questa è una soluzione adeguata per alcune volte, ma presenta aspetti negativi: ad esempio, i gesti delle chiavi diventano much more complicated.
Ma dopo aver visto la sessione "Build your own MVVM Framework" di Rob Eisenberg, non sono più soddisfatto dei comandi di inoltro e dei loro difetti. L'unico problema con i comandi indirizzati era il codice boilerplate ripetitivo, e una volta che si calcola il codice ripetitivo in un framework e si applicano le convenzioni, non sembra esserci più alcun motivo per non utilizzare i comandi instradati in MVVM.
Tecnicamente, sembra che questo non sia difficile. Il framework dovrebbe solo collegarsi agli eventi CommandManager.CanExecute e Executed della vista e applicare le convenzioni per cercare metodi e proprietà su ViewModel, ad esempio, quando viene eseguito il comando Taglia, cercare un metodo ExecuteCut (e la proprietà CanExecuteCut) su il ViewModel. Potrei costruire il mio framework MVVM che ha reso questo facile.
Ma la mia domanda è, ci sono già framework MVVM che funzionano con RoutedCommand? L'unico framework MVVM che conosco a fondo è Caliburn.Micro e al momento non supporta i comandi indirizzati in questo modo (il che mi sorprende, poiché supporta il suo stesso sapore di azione spumeggiante).
Il suo sito Web non dice nulla sugli eventi in routing. Ho dato una rapida occhiata al codice sorgente ma non sembra che ci sia qualcosa di rilevante lì. –