Mit MVVM und WPF was wäre eine gute/direkte Möglichkeit zum Öffnen und Schließen neuer Fenster und Dialoge? Öffnen und Schließen sollte vom ViewModel gesteuert werden, oder? Aber das ViewModel sollte nicht über die Ansicht wissen ...Wie gehe ich mit dem Öffnen und Schließen neuer Windows mit MVVM um?
Antwort
Ich verwende normalerweise Schnittstellen für diese. Zum Beispiel, wenn ich einen Datensatz in einem separaten Fenster bearbeiten möchte, habe ich eine Schnittstelle IEitingProvider <TViewModel>, die ich woanders implementieren kann und dann eine Schnittstellenreferenz an den Konstruktor von meinem ViewModel übergeben. Die EditingProvider könnte nur so etwas tun:
class MyRecordEditingProvider: IEditingProvider<MyRecordViewModel>
{
// Implementation of generic interface method
public void Edit(MyRecordViewModel model) {
EditWindow edit = new EditWindow();
edit.DataContext = model;
edit.ShowDialog();
}
}
Wie verwalten Sie die EditingProvider, die für einen bestimmten Teil Ihrer Anwendung verfügbar sind, und wie rufen Sie die richtige Instanz ab, die Sie schließlich an den Konstruktor von ViewModel übergeben? Ich nehme an, es ist nicht alles fest verdrahtet, aber entkoppelt? – bitbonk
Ja, es ist entkoppelt. Tatsächlich verwende ich ein Dependency Injection Framework (Composite Application Block von Microsoft), um die generischen Schnittstellen zu Implementierungen zuzuordnen. Ich mache das gerade im Code, aber der Unity Container kann auch mit einer Konfigurationsdatei konfiguriert werden. – Botz3000
Haben Sie eine MVVM-freundliche Lösung, um die Eigentümereigenschaft Ihres EditWindows festzulegen, bevor Sie ShowDialog aufrufen? Wenn der Owner nicht gesetzt ist (z. B. für das MainWindow), kann der modale Dialog hinter das Hauptfenster gehen, was aus der Benutzerperspektive ziemlich seltsam und verwirrend ist. – Slauma
- 1. Wie gehe ich mit dem LDAP Protokoll
- 2. Qt: Wie gehe ich mit dem Ereignis um, wenn der Benutzer die 'X' (Schließen) Taste drückt?
- 3. Wie gehe ich mit dem Hochladen von Dateien um?
- 4. öffnen und schließen mit OpenCV
- 5. Fenster öffnen und schließen Effekt mit C# in Windows-Anwendung
- 6. Öffnen eines About-Felds mit MVVM-Muster
- 7. C - Muss ich Dateien nach dem Öffnen mit Systemaufrufen schließen?
- 8. Wie gehe ich elegant mit einer PasswordBox in WPF um?
- 9. Wie gehe ich mit optionalen Parametern in Moose um?
- 10. Wie gehe ich mit "Projektdateien" in meiner Qt-Anwendung um?
- 11. Wie gehe ich mit Arrays mit Reflektion um
- 12. Korrektes Schließen neuer ViewController-Seiten
- 13. Windows Phone MVVM mit Sensoren
- 14. Wie gehe ich mit Punkten in MongoDB-Schlüsseln um?
- 15. Wie gehe ich mit rekursiven repr() in Python um?
- 16. Wie gehe ich mit Rich Content mit dem Microsoft Bot Framework um?
- 17. Wie gehe ich mit animierten Modellen in Three.js um?
- 18. Wie gehe ich mit diesem Zeiger in getaddrinfo um?
- 19. Wie gehe ich mit mehreren gemeinsamen Benutzeroberflächen um?
- 20. Wie gehe ich mit lokalen Datei-Uploads in Elektron um?
- 21. Wie gehe ich von Formularaktionen mit JQuery UI Dialog um?
- 22. Langsam - Öffnen und Schließen der Verbindung mit SQL Server
- 23. Öffnen/Schließen einer Datenbank mit dem Singleton-Entwurfsmuster
- 24. Wie gehe ich mit Drag & Drop im Designer um?
- 25. Wie gehe ich in dieser Situation mit der Speicherverwaltung um?
- 26. Wie gehe ich mit TODO-Kommentaren in VisualStudio 2010 um?
- 27. C# Ereignisse ohne Argumente. Wie gehe ich mit ihnen um?
- 28. Wie gehe ich mit den Testdaten in Junit um?
- 29. Wie gehe ich mit großen Arrays in MongoDB um?
- 30. Wie gehe ich mit benutzerdefinierten Fehlern global in Phoenix um?
Ich habe eine sehr ähnliche Frage in [diesem Beitrag] beantwortet haben (http://stackoverflow.com/a/15512972/385995). –