Ich baue eine WPF-Anwendung mit MVVM-Muster (beide sind neue Technologien für mich). Ich verwende Benutzersteuerelemente für einfache Bits wiederverwendbarer Funktionalität, die keine Geschäftslogik enthalten, und MVVM-Muster, um Anwendungslogik zu erstellen. Angenommen, eine Sicht enthält mein Benutzersteuerelement, das Ereignisse auslöst, und ich möchte diesem Ereignis einen Ereignishandler hinzufügen. Dieser Ereignishandler sollte sich im Ansichtsmodell der Sicht befinden, da er Geschäftslogik enthält. Die Frage ist - Ansicht und das Ansichtsmodell sind nur durch Bindung verbunden; Wie verbinde ich einen Event-Handler mit Binding? Ist es überhaupt möglich (ich vermute nicht)? Wenn nicht - wie sollte ich mit Ereignissen aus einem Steuerelement im Ansichtsmodell umgehen? Vielleicht sollte ich Befehle oder INotifyPropertyChanged verwenden?WPF - Behandlung von Ereignissen von der Benutzersteuerung in View Model
Antwort
Im Allgemeinen ist es eine gute MVVM-Praxis, Code im Code zu vermeiden, wie dies der Fall wäre, wenn Sie Ereignisse in Ihren Benutzersteuerelementen verwenden. Verwenden Sie also wenn möglich INotifyPropertyChanged
und ICommand
.
Mit diesem gesagt, je nach Ihrem Projekt und wie pragmatisch Sie sind, macht es manchmal mehr Sinn, den Code der Steuerung zu verwenden.
ich bei einigen Gelegenheiten haben etwas so benutzten:
private void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
MyViewModel vm = this.DataContext as MyViewModel;
vm.MethodToExecute(...);
}
Sie auch Attached Command Behaviour, weitere Informationen über diese in Erwägung ziehen könnte und Implementierungen hier zu finden:
Firing a double click event from a WPF ListView item using MVVM
auch eine nehmen siehe Frage How Can I Add a New Command to a Control's Event
Verwendung von ICommand in MVVM mit XAML.
http://johnpapa.net/5-simple-steps-to-commanding-in-silverlight
(MVVM als VVMM acronym'd haben sollte: Ansicht, Ansicht Modell, Modell, sieht auch besser aus :))
- 1. JavaScript Behandlung von Ereignissen
- 2. Model-View-ViewModel in WPF
- 3. Behandlung von schwerwiegenden Ausnahmen in ViewModel/Model
- 4. Behandlung von Ereignissen für ein vererbtes Formular
- 5. Behandlung von Ereignissen für spät gebundene Objekte
- 6. Java Exception Behandlung in "Ereignissen"
- 7. MVVM Access Model von View
- 8. Beziehung zwischen Model View und View-Modell in WPF
- 9. Behandlung von Ereignissen der Steuerelemente hinzugefügt zur Laufzeit
- 10. Heben und Behandlung von Ereignissen in separaten Prozessen
- 11. Variablen und Kontext in JS OOP Behandlung von Ereignissen
- 12. wpf Benutzersteuerung blockiert Stile
- 13. WPF-Benutzersteuerung mit Textfeldern
- 14. Schwierigkeiten bei der Implementierung von Model-View-Presenter in Android
- 15. Model View Controller in der Qt-Anwendungsentwicklung
- 16. Model-View-ViewModel Musterverletzung von DRY?
- 17. WPF-Benutzersteuerung als Elementvorlage
- 18. Vb.net Model View Control
- 19. Wie wpf Benutzersteuerung in MVVM Muster laden
- 20. Model-View-Controller in JavaScript
- 21. Abrufen von WPF-ETW-Ereignissen mit XPerf.exe
- 22. Benötigen Sie Hilfe bei der Behandlung von Ereignissen eines DataTemplate in der Datei Application.xaml
- 23. Call Model from View
- 24. Monodroid - Behandlung von Ereignissen auf untergeordneten Ansichten von wiederverwendbaren ListView-Zeilen
- 25. Was ist der Unterschied zwischen Model-View-Presenter und Model-View-Adapter?
- 26. Send Menüelementname als Parameter zu View-Model-Methode [WPF, Caliburn.Micro]
- 27. Verwenden von Model-View-Presenter-Muster in einer MFC-Anwendung
- 28. C# WPF Route Ereignis von Benutzersteuerung zu MainForm
- 29. Weiterleiten von Ereignissen in C#
- 30. Container-Benutzersteuerung mit Entwurfszeitunterstützung in WPF erstellen?
Kontrolle wiederverwendbar sein sollte, so wird der Code nicht - es bindet das Steuerelement an ein bestimmtes Ansichtsmodell. Befehle ... Wahrscheinlich nicht - sie sind eher für Benutzeraktionen. INotifyPropertyChanged dann? Danke :) – Vitaly
Schwer für mich zu sagen, ohne weitere Einzelheiten zu kennen. Aber ich habe einige Links zu verwandten Informationen hinzugefügt: – ThomasAndersson
@Vitaly Wenn Sie sich Sorgen machen, die View mit dem expliziten ViewModel zu verknüpfen, können Sie das ViewModel in eine Schnittstelle einfügen. Ich würde in Attached Command Behaviors nachsehen, dass sie zur akzeptierten Praxis werden. Schauen Sie sich auch MVVMLight oder Caliburn als Framework an, um Ihre MVVM-Arbeit zu unterstützen, es wird Ihnen das Leben viel leichter machen. – Agies