2016-04-29 12 views
1

Ich versuche, den Modell-View-Viewmodel-Ansatz zu verstehen. Nehmen wir an, ich habe Klassen namens Jahr, Projekt, Mensch. Jedes Jahr enthält eine Liste mit den Projekten des Jahres und jedes Projekt enthält eine Liste mit den Menschen, die an dem Projekt arbeiten.wpf Viewmodel mit mehreren Hierarchen

Ich möchte eine Übersicht über alle diese Daten anzeigen. Vielleicht ein TabControl, das die verschiedenen Jahre anzeigt, und dann Listen der zugehörigen Projekte und ihrer Mitglieder in den TabItems.

Muss ich nun ein ModelViewYear erstellen, das auf ein Jahr verweist und eine Liste der zugeordneten ModelViewProjects enthält, die eine Liste der zugeordneten ModelViewHumans enthält?

Oder ist das total falsch und ich brauche nur ein ModelViewTabitem, das die Daten darstellt?

+1

Was hast du schon versucht? –

+0

Ich versuchte die erste Version, aber kämpfte mit der Tatsache, die gleichen Infos mehrfach zu speichern (z. B. Projekt enthält Liste von Menschen und viemodelproject enthält Liste von viewmodelhumans) – Moritz

+0

Erstellen Sie kein Viewmodel für jede Kleinigkeit. Habe nur einen für diese Ansicht (sagen wir ProjectsViewModel). Jeder Projekttyp in einer Sammlung wird Eigenschaften für Jahr (wenn Sie wirklich einen benutzerdefinierten Typ dafür benötigen) und für Mensch haben, damit Sie sie anzeigen können, wie Sie möchten. – icebat

Antwort

0

Ihre tatsächliche Anforderung ist mir nicht klar.

Sind Jahr, Projekt, menschliche Daten Klassen? Nach meinem Verständnis möchten Sie eine erste Liste mit Jahren füllen, wenn ein Benutzer auf ein Listenelement klickt, eine neue Liste angezeigt und mit den Projekten gefüllt wird und wenn ein Benutzer auf ein bestimmtes Projekt klickt, füllt eine neue Liste mit Personendaten.

Ja, das ist mit einem MVVM-Modell problemlos möglich. Erstellen Sie zuerst eine Ansicht, die 3 Listenansichten enthält, und legen Sie die Sichtbarkeit jeder Listenansicht gemäß Ihren Anforderungen fest. Mit MVVM binden Sie die Objektquelle dieser Listenansichten an die entsprechende ObservableCollection im Ansichtsmodell der entsprechenden Ansicht. Sie können diese ObservableCollection s als Ihre Datenquelle verwenden und die Sichtbarkeit jeder Listenansicht binden, wenn ein Element in der übergeordneten Liste ausgewählt ist.

Ich hoffe, Sie haben ein Verständnis für das gleiche.

+0

ja, sie sind Datenklassen. Ich wollte jedes Jahr als Tabitem erscheinen, das Projektlisten von assoziierten Menschen enthält. Also würden Sie auch eine ModelViewXY-Klasse erstellen und dort die verschiedenen oberservablecollections halten? – Moritz

+0

Nein, Sie könnten alles in einem Ansichtsmodell selbst machen. Erstellen Sie eine Ansicht und ein entsprechendes Ansichtsmodell. Innerhalb des View-Modells können Sie die gleiche Logik wie oben erwähnt verwenden, um eine Liste oder Tabelle oder ein DataGrid gemäß Ihren Anforderungen zu füllen und alle Quellen dort zu definieren! – ViVi

+1

Richtig, ich meinte es so;) – Moritz

Verwandte Themen