WPF und MVVM. Verbindliche Veranstaltungen
Ich entwickle eine WPF-Anwendung mit dem MVVM-Muster, RelayCommand, etc.
Ich lese viel auf diese Frage, aber ich bin nicht klar:
Alles was ich will zu tun ist, verschieben einer Form, wie eine ellipse, zum Beispiel, und zeichnen Sie die endgültige position zu setzen, in der Datenbank.
Aber ich kann nicht binden die Ereignisse (MouseLetButtonDown, MouseLeftButtonUp und MouseMove) zu Befehlen. Ich habe gelesen, über die angebrachten Verhaltensweisen , aber ich brauche die Argumente der Ereignisse (MouseButtonEventArgs und MouseEventArgs) zum abrufen der position.
Lösung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim schreiben einer MVVM-grafische Anwendung, ist es verlockend, zu versuchen, zu senden all die Ereignisse, die Sie benötigen, über das view-Modell. Aber die Sicht serviceauftragsbearbeitung-spezifischen Maus-Ereignis args in einem Befehl ist im Gegensatz zu MVVM Prinzipien und dem Ziel der losen Kopplung.
Den Weg, um dieses problem zu lösen ist, zu abstrahieren, den Betrieb in eine Aufgabe, die der Ansicht ausführen kann und dann zu kommunizieren Ihre Ergebnisse zurück an das view-Modell über die Vorgänge und Daten. Wenn Sie möchten, führen Sie eine kleine Menge an code in der code-behind-um dies zu unterstützen, das MVVM-Polizei wird nicht kommen, und Ihre Kinder nehmen. Aber eine noch bessere Möglichkeit ist das hinzufügen von Interaktivität mit Verhalten. Verhaltensweisen sind wiederverwendbare Stücke von Funktionalität ohne code-behind -, dass die Arbeit gut mit dem MVVM-Muster und Anwendungen, die Interaktivität, die sonst erfordern das hinzufügen von Ereignishandlern in XAML.
Siehe meine Antwort hier ein vollständiges Beispiel für ein Verhalten, das nutzt Maus-Ereignissen für das ziehen von grafischen Objekten:
Mit Ihrer Interaktivität erfolgt durch die Ansicht, die view-Modell stecken kann, um Daten und Befehle.
Dies funktioniert für Silverlight-so sollte es auf WPF (oder sollte es zumindest mit geringfügigen änderungen)
Finden Sie XCommand open-source-wpf codeplex-extention-Projekt hier, xcommand.codeplex.com, dies ermöglicht Ihnen das binden Command und CommandParameter aller Ereignisse wie MouseMove, MouseLeftButtonDown, um alle UI-Elemente, die erbt von WPF UIElement.
Finden Sie windows store-8-Anwendung und windows desktop-Anwendung version der Klassen-Bibliotheken hier. Sie möchten WPFXCommand, die sich mit WPF-desktop-Anwendung.
Hier, wie es funktioniert.
Hinzufügen WPFXCommand.dll als Referenz zu Ihrem Wunsch-Projekt.
Fügen Sie den namespace auf die xaml-Datei wie folgt:
Nun, Sie können binden Befehl und CommandParameter, um alle verfügbaren Ereignisse auf irgendwelche UI-Elemente Erben von WPF UIElement als unten:
Hoffe, dies wird Ihnen helfen, um loszuwerden, Ereignis-basierte code-behind.