Ich schreibe eine App, mit der Benutzer Daten durchsuchen können, und ich möchte den FireFox-UI-Stil verwenden: Erlaubt dem Benutzer, so viele Fenster wie gewünscht mit jeweils so vielen Tabs zu öffnen, wie sie möchten . Ich möchte auch versuchen, dies so weit wie möglich mit dem Model-View-ViewModel-Muster zu tun.MVVM und Fensterlisten
Das Öffnen einer neuen Registerkarte sollte in MVVM einfach zu handhaben sein. Erstellen Sie eine ObservableCollection von TabViewModel, binden Sie diese Auflistung an die ItemsSource eines TabControl, und das Öffnen eines neuen Tabs ist theoretisch so einfach wie das Hinzufügen eines neuen TabViewModel zur Auflistung.
Hier ist die Frage, die mich interessiert: Gibt es eine Möglichkeit, das gleiche zu tun, um ein neues Fenster zu öffnen? B. eine ObservableCollection von WindowViewModel an die ItemsSource von ... der Windows-Sammlung der Anwendung anhängen? ..., so dass, wenn ich der beobachtbaren Sammlung ein neues WindowViewModel hinzufüge, automatisch ein neues Fenster geöffnet wird? Und dann binden Sie das in den App-Start, so dass ich statt StartupUri nur das erste WindowViewModel zur Sammlung hinzufügen?
Da kann ich nicht wirklich databind Application.Windows, was der beste Weg für die Ansichtsmodell Schicht sein würde:
- hinzufügen erscheint ein neues WindowViewModel und haben ein neues Fenster automatisch;
- Entfernen Sie das WindowViewModel, und das Fenster wird automatisch geschlossen.
- Entfernen Sie das WindowViewModel aus der Sammlung, wenn der Benutzer das Fenster schließt.
Ich konnte mein eigenes Objekt schreiben, die ein INotifyCollectionChanged Uhren und öffnen/schließen Fenster als Reaktion auf Sammlung Ereignisse, aber ich bin mir nicht sicher, ob das der beste Weg ist - und wenn es ist, ich bin nicht sicher, der beste Weg, um es in die Anwendung zu haken. Hat jemand Gedanken über den besten Weg, dies zu tun?