Laden...

MVVM: Muss ich für ein Model 2 ViewModels besitzen?

Erstellt von reloop vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.634 Views
reloop Themenstarter:in
139 Beiträge seit 2010
vor 12 Jahren
MVVM: Muss ich für ein Model 2 ViewModels besitzen?

Hallo liebe Community,

ich habe eine Verständnisfrage zum Verwalten der Models im MVVM Konstrukt.

Und zwar geht es um folgendes:

Muss ich für ein Model quasi 2 ViewModels besitzen? Eins, welche Alle Daten beinhaltet und eins welches sich immer um genau ein Objekt kümmert?

Angenommen, ich habe eine Adressverwaltung. Diese beinhaltet ein Model "Adressen". Habe ich dann nun ein ViewModel "AllAdressenViewModel" und ein "AdressenViewModel"?

Oder ist es in Ordnung - so wie ich es bisher mache - ein ViewModel zu haben welches:

AdressenViewModel heißt, das eine ObservableCollection<Adressen> mit ALLEN Adressen besitzt und als Property ein "CurrentAdresse" object, wo immer das aktuell zu bearbeiten Adressen Objekt liegt?

Gruss,
reloop

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

bei deinem bisherigen Vorgehen trennst du doch Model und ViewModel gar nicht richtig, wenn du ne Collection<Model> als Property nach außen gibst. Das müsste korrekterweise ne Collection<ViewModel> sein. Sprich so wie du es eingangs erwähnst. Ein ViewModel für die Adresse als solches und ein ViewModel welches die Adressen nach außen gibt wenn du sowas brauchst.

Baka wa shinanakya naoranai.

Mein XING Profil.

reloop Themenstarter:in
139 Beiträge seit 2010
vor 12 Jahren

Danke, Talla.

Wäre folgende Aufsplittung denn richtig?

IST-ZUSTAND:

Es existiert ein Model mit dem Namen "Adresse".
Ed existiert ein ViewModel mit dem Namen "AdresseViewModel".
AdresseViewModel besitzt folgende Properties:

ObservableCollection<T1> DataList
T1 Current

und folgende Methoden:

Save()
Delete()
New()

.. diese arbeiten alle immer mit dem "Current"-Objekt.

SOLL-ZUSTAND

Es existiert ein Model mit dem Name "Adresse".
Es existieren 2 ViewModels:

++AdresseViewModel ++ mit folgenden Methoden:

Save()
Delete()
New()

AllAdressViewModel mit folgender Property&Methode:

ObservableCollection<Adresse> DataList

-

LoadData()


Kommt das in etwa dem hin, was als Standard definiert wird?

Oder wie würdest du es Lösen, wenn du zum einen eine Übersicht aller Erfassten Adressen in einem Grid realisieren müsstest, welches beim Doppelklick auf einen Datensatz, das Beabreiten von diesem ermöglicht?

Gruss,
reloop

PS:
Danke für die Hilfe.

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

SOLL-ZUSTAND

AllAdressViewModel mit folgender Property&Methode:

ObservableCollection<Adresse> DataList

Das ist doch das gleiche Problem wie vorher - du gibst das Model direkt zur View (weil die bindet ja gegen AllAdressViewModel) und damit hast du überhaupt keine Trennung im Sinne von MVVM. Es müsste nen ObservableCollection<AdresseViewModel> DataList sein.

Was die Save(), Delete(), New() Methoden angeht, würde ich persönlich die nicht direkt ins Model packen. Sowas wie Speicherort etc. musst du dann ja in jedem Model mitschleppen, halte ich für völlig unnötig. Ich mach die Models extrem dumm, einfach nur zur Datenhaltung mit kaum mehr. Die Persistenz übernimmt für mich ne extra Klasse die auf Modelebene ungefähr ist und dann Methoden hat wie LoadModelX, SaveModelX etc. Die ViewModels die dann die Listen aller Objekte bereitstellen rufen dann jeweils die Mehoden auf um die Daten zu laden oder zu speichern.

Baka wa shinanakya naoranai.

Mein XING Profil.

reloop Themenstarter:in
139 Beiträge seit 2010
vor 12 Jahren

Danke talla.

Eine letzte Frage:

Wenn meine AllAdressViewModel nun eine DataList<AdressViewModel> beinhaltet, muss ich dann alle Eigenschaften des Models auch in dem AdressViewModel hinterlegen?

Gruss

821 Beiträge seit 2009
vor 12 Jahren

Nur die, die du Anzeigen willst! Oder du lässt das Binding direkt durch das ViewModel aufs Model zugreifen (gefällt mir allerdings nicht so).

Gruß
Christoph

reloop Themenstarter:in
139 Beiträge seit 2010
vor 12 Jahren

Danke für eure Hilfe.

Alle weitern Informationen habe ich hier gefunden:

http://msdn.microsoft.com/de-de/magazine/dd419663.aspx

Gruss,
reloop