Sto costruendo un'applicazione WPF utilizzando il pattern MVVM (entrambe sono nuove tecnologie per me). Uso i controlli utente per semplici bit di funzionalità riutilizzabili che non contengono logica aziendale e pattern MVVM per creare la logica dell'applicazione. Supponiamo che una vista contenga il mio controllo utente che attiva gli eventi e voglio aggiungere un gestore di eventi a quell'evento. Quel gestore di eventi dovrebbe essere nel modello di vista della vista, perché contiene la logica di business. La domanda è: vista e il modello di vista sono collegati solo da binding; come posso collegare un gestore di eventi usando l'associazione? È persino possibile (non sospetto)? In caso negativo, come devo gestire gli eventi da un controllo nel modello di visualizzazione? Forse dovrei usare i comandi o INotifyPropertyChanged?WPF - Gestione degli eventi dal controllo utente in Visualizza modello
risposta
In generale, è buona norma MVVM evitare codice nel codice, come sarebbe il caso se si utilizzano eventi nei controlli utente. Quindi, quando possibile, utilizzare INotifyPropertyChanged
e ICommand
.
Detto questo, a seconda del progetto e di quanto sia pragmatico, alcune volte ha più senso utilizzare il codice del controllo.
ho a alcune occasioni usato qualcosa di simile:
private void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
MyViewModel vm = this.DataContext as MyViewModel;
vm.MethodToExecute(...);
}
Si potrebbe anche considerare Attached Command Behaviour, maggiori informazioni su questo e le implementazioni di trovare qui:
Firing a double click event from a WPF ListView item using MVVM
Anche dare guarda la domanda How Can I Add a New Command to a Control's Event
Utilizzo di ICommand in MVVM con XAML.
http://johnpapa.net/5-simple-steps-to-commanding-in-silverlight
(MVVM avrebbe dovuto essere acronym'd come VVMM:, Vista modello, il modello, guarda anche meglio :))
- 1. Gestione degli eventi del controllo utente WPF
- 2. WPF - Gestione degli eventi collegati personalizzato su controlli personalizzati
- 3. Gestione degli eventi in Haskell
- 4. Gestione degli eventi in Java
- 5. Cattura eventi KeyDown in un controllo utente
- 6. Gestione degli eventi con PowerShell?
- 7. Gestione degli eventi di background worker
- 8. Sospendi temporaneamente la gestione degli eventi jQuery
- 9. eventi di controllo del livello degli opuscoli?
- 10. Gestione degli eventi OnNavigatedFrom/OnNavigatedTo nel ViewModel
- 11. WPF - Visualizza singola entità con un modello di dati
- 12. Gestione degli eventi di modifica in un JTextField
- 13. Gestione eventi chiave sul controllo WebBrowser
- 14. Interruzione dei cicli degli eventi nelle interfacce utente
- 15. Gestione degli eventi Javascript non gestiti da altri elementi
- 16. Modello di controllo DataGrid WPF
- 17. Nascondi controllo all'interno di una libreria di controllo utente WPF
- 18. DataContext del controllo utente WPF è Null
- 19. Gestione degli errori nel modello (MVC)
- 20. Controllo WPF sulla filettatura dell'interfaccia utente separata?
- 21. Gestione degli eventi di interrupt Ctrl + C in Linux
- 22. Gestione degli eventi del mouse in livelli SVG sovrapposti
- 23. Gestione degli eventi click su layer z-index
- 24. Miglioramento della gestione degli eventi PropertyChanged e PropertyChanging
- 25. Finestra di dialogo per la gestione degli errori personalizzata WPF?
- 26. WPF controllo utente problema della classe base
- 27. Visualizza nome completo invece di Nome utente in LoginName Controllo
- 28. WPF - Eventi su un ControlTemplate?
- 29. Accesso al valore di controllo utente WPF
- 30. Come creare un calendario personalizzato con la gestione degli eventi?
di controllo dovrebbe essere riutilizzabili, in modo che il codice non lo farà - è lega il controllo a un modello di vista specifico. Comandi ... Probabilmente no - sono più utili per le azioni dell'utente. InotifyPropertyChanged allora? Grazie :) – Vitaly
Difficile dire per me senza conoscere più specifiche. Ma ho aggiunto alcuni collegamenti alle informazioni correlate – ThomasAndersson
@Vitaly se si è preoccupati di legare la vista al ViewModel esplicito, si potrebbe avvolgere ViewModel in un'interfaccia. Analizzerei i Comandi di Comando Allegati che stanno diventando la pratica accettata. Inoltre, controlla MVVMLight o Caliburn come framework per assistere nel tuo lavoro MVVM, ti renderà la vita molto più facile. – Agies