2009-07-16 9 views
1

Ich habe eine ziemlich große Anzahl von Parent-Detail ViewModels in meiner MVVM-Anwendung. Etwas wie folgt aus:MVVM: Suchen anderer ViewModels

SchoolsViewModel 
    +- SchoolViewModel 
     +- LessonViewModel 
      +- PupilsViewModel 
       +- PupilViewModel 
      +- TeacherViewModel 
     +- PupilsViewModel 
      +- PupilViewModel 
       +- LessonsViewModel 
     +- TeachersViewModel 

Und so weiter ...

Zusätzlich ist eine Einzelansicht Modell kann in mehr als einer Stelle erscheinen, je nachdem, ob der Benutzer durch Lektion oder Schüler ist das Surfen, usw.

Wie würden Sie die Freigabe von untergeordneten ViewModels zwischen verschiedenen übergeordneten ViewModels zulassen? Zum Beispiel wird "Schüler A" in dem PupilsViewModel auf der höchsten Ebene und auch in einer Anzahl von PupilsViewModels, die in LessonViewModels enthalten sind, vorhanden sein. Würden Sie mehrere PupilViewModel-Objekte erstellen, die sich auf dasselbe Datenmodell beziehen? Oder irgendwie ein vorhandenes Ansichtsmodell für das Datenmodell lokalisieren?

Diese Frage hat eine andere damit verbundene Frage: MVVM and StructureMap usage

Antwort

0

würde ich vorschlagen, nur eine Instanz des Schüler A. Auf diese Weise ist, wenn der Benutzer aktualisiert einen Schüler an einer Stelle, dass Schüler überall in der Anwendung aktualisiert wird. Um dies zu erreichen, müssen Sie INotifyPropertyChanged für jedes ViewModel implementieren, was in MVVM jedoch Standard ist.

In Ihrem Fall empfehle ich mit CollectionViews verschiedene Ansichten Ihrer PupilsViewModel (Sammlung) zu verschiedenen Teilen Ihrer Anwendung zu bieten. Auf diese Weise arbeiten sie mit den gleichen zugrunde liegenden Daten, aber die verschiedenen Teile der Anwendung können unabhängig voneinander navigieren.

+0

Großer Vorschlag! Das Verwenden eines CollectionView löste dieses Problem gut, danke! – Grokys

0

Warum nicht DataTemplates verwenden, um festzulegen, welche Ansicht an jedes Modell gebunden wird? Und in den Ansichten können Sie einfach einen ContentPresenter verwenden, der an die Modelleigenschaft des übergeordneten Viewmodells gebunden ist.

Ich denke, es wird den Trick tun.

Verwandte Themen