2009-09-23 2 views
9

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?

+0

Ich habe eine sehr ähnliche Frage in [diesem Beitrag] beantwortet haben (http://stackoverflow.com/a/15512972/385995). –

Antwort

6

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(); 
    } 
} 
+0

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

+0

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

+0

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

Verwandte Themen