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 eineBoard
und 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!