Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
MVVM: Muss ich für ein Model 2 ViewModels besitzen?
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

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

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

Hallo,
Zitat von reloop
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.
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Christoph K.
myCSharp.de - Member

Avatar #avatar-3248.png


Dabei seit:
Beiträge: 814
Herkunft: Köln

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

beantworten | zitieren | melden

Danke für eure Hilfe.

Alle weitern Informationen habe ich hier gefunden:

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


Gruss,
reloop
private Nachricht | Beiträge des Benutzers