2010-11-27 7 views
0

Ich bin nicht wirklich sicher, wie diese Art und Weise in der besten MVVM zu tun ...MVVM - eine Registerkarte zu schließen, wenn ein Datensatz gelöscht wird

Grundsätzlich öffnet mein Haupt-App ein Suchfenster, das alle Datensätze zeigt in ein TabPanel. Wenn ein Datensatz doppelt angeklickt wird, wird ein neuer Tab mit diesem Datensatz geöffnet. Jetzt versuche ich, die Dinge MVVM zu halten, aber ich kann nicht für das Leben von mir herausfinden, wie man das GUI-Tabitem schließt, wenn eine Person den Datensatz löscht (warum offen lassen, wenn der Datensatz weg ist).

Die einzige Möglichkeit, wie ich es jetzt tun kann, ist die Instanz des TabItem als Parameter des DeleteCommand übergeben, die für mich scheint wie ein großes Nein, aber ich kann nicht für das Leben von mir herausfinden, wie dies zu erreichen ist.

Antwort

3

Wenn Sie dies im Sinne von MVVM tun würden, würde ein Doppelklick auf einen Datensatz hinter den Kulissen einen Datensatz zu einer Sammlung von Datensätzen hinzufügen. Diese Datensatzauflistung ist die Datenquelle für die Registerkarten in Ihrem Steuerelement. Das Entfernen dieses Elements aus der Liste (normalerweise ObservableCollection<T>) würde dazu führen, dass die Benutzeroberfläche aktualisiert und die Registerkarte entfernt wird.

Welchen Ansatz verwenden Sie derzeit, um die Registerkarte anzuzeigen?


Edit (als Antwort auf Kommentar):

Das ist nicht "true" MVVM. Es spielt keine Rolle, ob die Registerkarten mehr als nur Datensätze sein können. Sie sollten Ansichtsmodelle erstellen, die diese Details abstrahieren, und dann Ihre Ansichtsmodellinstanzen (RecordViewModel, ReportViewModel usw.) in eine beobachtbare Sammlung einfügen und an diese binden. Verwenden Sie Datamplates, um die richtigen Ansichten für den Inhalt jeder Registerkarte basierend auf dem Typ des Ansichtsmodells zu erstellen, an das die aktuelle Registerkarte gebunden ist.

+0

ich einfach eine TabItem erstellen und sie dem TabCollection hinzuzufügen. Ich mache das, weil die Tabs mehr als nur Datensätze sein können. Es kann eine Registerkarte geben, die einen Bericht (rdlc) enthält, oder eine Registerkarte, die die SearchAllView usw. enthält. –

1

Josh Smith schrieb einen erstaunlichen Artikel, der beschreibt, wie MVVM funktioniert. Die Beispielanwendung tut etwas sehr ähnlich zu dem, was Sie tun möchten.

Die Anwendung zeigt ein TabControl an, das einen oder mehrere Arbeitsbereiche anzeigt. Der Arbeitsbereich zeigt zwei verschiedene Arten von Elementen an. Die Tab-Elemente sind schließbar. Schau mal, ich bin mir sicher, dass das dein Problem lösen wird.

WPF Apps With The Model-View-ViewModel Design Pattern

Verwandte Themen