Ho visto tutorial in cui le persone stanno creando metodi come CanExecute nel loro codice. Presumo che lo stiano facendo per aiutare il lettore a capire come funziona. Quando cerco Command e ICommand, mi porta alla classe ICommand su MSDN che viene utilizzata per le app di Windows Store. Non c'è una classe Command per WPF?Comandi in MVVM
risposta
L'implementazione integrata di ICommand
in WPF è RoutedCommand
(e sua sorella RoutedUICommand
). RoutedCommand
funziona così:
I
Execute
eCanExecute
metodi su unRoutedCommand
non contengono la logica di applicazione per il comando come è il caso con un tipicoICommand
, ma piuttosto, questi metodi generano eventi che attraversano la elemento albero alla ricerca di un oggetto con unCommandBinding
. I gestori di eventi collegati aCommandBinding
contengono la logica di comando.
Il problema di questo è che questi gestori di eventi devono essere attaccati al code-behind per il vostro vista, che è esattamente ciò che si fa non vogliono fare in MVVM.
Esercitazioni in cui si vede CanExecute
metodi nel codice (e con questo significano veramente codice al di fuori del ICommand
implementazione) utilizzano implementazioni dei comandi personalizzati come DelegateCommand
e RelayCommand
che sono progettati per "avanti" la loro logica CanExecute
/Execute
a funzioni fornite al volo; tipicamente, quelli sono metodi sul viewmodel che espone il comando.
Queste implementazioni sono di solito fornite da framework MVVM (per questi due esempi i framework sono rispettivamente Prism e MVVM Light), ma sono veramente semplici (entrambi sono open source, prendi il codice e lo leggi) e non c'è niente che ti fermi da copiare/incollare il codice se non si desidera l'intero framework.
È possibile riepilogare quanto sopra come "lo è integrato in una classe di comando in WPF, ma non è realmente utile nel contesto di MVVM".
- 1. Comandi MVVM asincroni
- 2. MVVM Madness: comandi
- 3. Comandi hotkey per Silverlight in MVVM?
- 4. Principi di comandi e MVVM - RelayCommands
- 5. ContextMenu in MVVM
- 6. WVF MVVM Utilizzo di comandi e gestori di eventi
- 7. Collegamento a comandi in WinForms
- 8. MVVM Foundation vs MVVM Toolkit
- 9. Perché gli eventi e i comandi in MVVM non sono supportati da WPF/Visual Studio?
- 10. Ridurre il codice di codice in app MVVM WPF per proprietà, comandi, ecc.?
- 11. silverlight - comunicare tra 2 modelli vista in MVVM utilizzando i comandi
- 12. Come gestire gli eventi in MVVM
- 13. Deseleziona ComboBoxItems in MVVM
- 14. Reactive Extensions (Rx) + MVVM =?
- 15. MVVM, Animazioni e comandi - Il modo migliore per dare il via alle animazioni?
- 16. MVVM Command Binding
- 17. MVVM standardizzazione
- 18. WPF e MVVM. Binding Eventi
- 19. Carica rtf in bindable RichTexBox mvvm wpf
- 20. Utilizzo di MVVM in iOS
- 21. Database WPF Image.Source in MVVM
- 22. ViewModels in ViewModelLocator MVVM Light
- 23. Change Notification in MVVM gerarchie
- 24. MVVM Raggruppamento articoli in ListView
- 25. Ricezione CommandParameter Value in MVVM
- 26. come mostrare Messagebox in MVVM
- 27. Cronologia comandi in R
- 28. Comandi multilinea in GHCi
- 29. Buoni esempi di MVVM Template
- 30. Notifica avanzamento thread in background in MVVM?
Si dovrebbe probabilmente notare, in base a come il nuovo OP è MVVM, che è possibile implementare la propria versione di DelegateCommand molto semplicemente senza dover utilizzare uno specifico framework MVVM. – Thelonias
@Ryan: Grazie, ho apportato alcune modifiche alla risposta e ora riflette il tuo suggerimento. – Jon
Quindi DelegateCommand viene fornito da Microsoft per me da utilizzare? Questa è la mia prima applicazione WPF e la mia prima applicazione MVVM. Anche se ho usato WinForms per un paio d'anni. Finora mi piace davvero WPF! Poiché questa è la mia prima applicazione MVVM, preferirei creare tutto il codice da solo e non utilizzare alcun Framework come MVVM Light in modo da avere una migliore comprensione di come tutto funzioni. – tylerbhughes