MVVM- und View / ViewModel-Hierarchie

Ich arbeite an meinem ersten Spiel mit C # und XAML für Windows 8. Ich lerne immer noch die wichtigsten Konzepte und bewährten Methoden, und MVVM war eine Hürde. Ich werde versuchen, die Frage in zwei Teilen zu stellen.

Hintergrund

Das Spiel, das ich mache, ist Sudoku. Sudoku hat eine Tafel, die ein 9x9-Raster von Kacheln enthält. Ich habe drei Modelle -Game, Board, undTile. Wenn einGame erstellt wird, erstellt es automatisch eineBoardund wenn dieBoard erstellt wird, schafft es 81 (9x9)Tiles.

1. Wie werden mit einer Hierarchie von Ansichten entsprechende Ansichtsmodelle erstellt?

Um der Hierarchie der Modelle zu entsprechen, hätte ich gerne eine Hierarchie der Ansichten (GameView enthält einBoardView welches 81 enthältTileViews). In XAML ist es ziemlich einfach, diese Hierarchie von Ansichten mit Benutzersteuerelementen zu erstellen, aber ich verstehe nicht, wie die Ansichtsmodelle erstellt werden.

In den Beispielen, die ich gesehen habe, wird der Datenkontext eines Benutzersteuerelements häufig auf das Ansichtsmodell festgelegt (mithilfe derViewModelLocator als Quelle), die eine neue Instanz des Ansichtsmodells erstellt. Dies scheint gut zu funktionieren, wenn Sie eine flache Ansicht haben, aber es scheint auch chaotisch zu werden, wenn Sie eine Hierarchie haben. Tut dasGameView ein ... kreierenGameViewModel und überlasse es seinemBoardView Kind zu schaffen einBoardViewModel? Wenn ja, wie funktioniert das?GameViewModel kommunizieren mit demBoardViewModel? Kann dasBoardViewModel Sichern Sie die Hierarchie mit demGameViewModel?

2. Wie erhält ein Ansichtsmodell Modelldaten?

Unter iOS würde ich zunächst einen Dienst zum Abrufen einesGame Modell, das vorab mit Daten gefüllt wurde. Ich würde dann eine erstellenGameViewController view controller (der für die Erstellung der Ansicht verantwortlich war) und übergeben Sie dieGame dazu. In MVVM sehe ich den Wert darin, dass eine Ansicht dafür verantwortlich ist, ein eigenes Ansichtsmodell zu erstellen (idealerweise unter Verwendung von aViewModelLocator), aber ich verstehe nicht, wie dieses Ansichtsmodell das Modell erhält.

In allen Beispielen, die ich online gefunden habe, verwendet das Ansichtsmodell einen Dienst, um seine eigenen Daten abzurufen. Aber ich habe kein Beispiel gefunden, das Konstruktorparameter oder Parameter akzeptiert, die von einer höheren Navigationsstufe übergeben wurden. Wie geht das?

Ich möchte keine Anwendungsressource oder eine andere Singleton-Speichermethode für mein Modell verwenden, da dies nicht der Fall ist, aber was ist, wenn ich mehrere Rätsel gleichzeitig auf dem Bildschirm anzeigen möchte? JederGameView sollte eine eigene enthaltenGame.

Nicht nur dasGameViewModel brauche einen Verweis auf dieGame Modell, aber dieBoardViewModel das wurde irgendwie erstellt (siehe frage 1) braucht einen hinweis auf dieBoard Modell, das zu der gehörtGame Modell. Das gleiche gilt für alleTiles. Wie werden all diese Informationen in der Kette weitergegeben? Kann ich so viel schweres Heben vollständig in XAML ausführen oder muss ich eine Art Bindung oder andere Initialisierung im Code ausführen?

Puh!

Ich freue mich über jeden Rat, den Sie geben können, auch wenn es keine vollständige Antwort ist. Ich bin auch daran interessiert, Beispiele für MVVM-Projekte zu finden, die ähnliche Herausforderungen aufweisen wie ich. Danke vielmals!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage