Hierarchia MVVM i View / ViewModel
Pracuję nad stworzeniem mojej pierwszej gry przy użyciu C # i XAML dla Windows 8. Nadal uczę się podstawowych pojęć i najlepszych praktyk, a MVVM jest przeszkodą. Spróbuję zadać pytanie w dwóch częściach.
tło
Gra, którą tworzę to Sudoku. Sudoku ma planszę zawierającą siatkę płytek 9x9. Mam trzy modele -Game
, Board
, iTile
. KiedyGame
jest tworzony, automatycznie tworzyBoard
i kiedyBoard
jest tworzony, tworzy 81 (9x9)Tiles
.
1. Z hierarchią widoków, w jaki sposób tworzone są odpowiednie modele widoków?
Aby dopasować hierarchię modeli, chciałbym mieć hierarchię widoków (GameView
zawiera aBoardView
który zawiera 81TileViews
). W XAML tworzenie hierarchii widoków za pomocą elementów sterujących użytkownika jest bardzo łatwe, ale nie rozumiem, jak tworzone są modele widoków.
W przykładach, które widziałem, kontekst danych formantu użytkownika jest często ustawiony na model widoku (za pomocąViewModelLocator
jako źródło), które tworzy nową instancję modelu widoku. Wydaje się, że działa to dobrze, jeśli masz płaski widok, ale wydaje się, że staje się bałagan, gdy masz hierarchię. Czy toGameView
StwórzGameViewModel
i zostaw toBoardView
dziecko, aby stworzyćBoardViewModel
? Jeśli tak, to jakGameViewModel
komunikować się zBoardViewModel
? Czy możeBoardViewModel
komunikować się z powrotem w hierarchii doGameViewModel
?
2. W jaki sposób model widoku pobiera dane modelu?
W systemie iOS zacznę od użycia usługi do pobraniaGame
model, który został wstępnie wypełniony danymi. Wtedy stworzyłemGameViewController
widok kontrolera (który był odpowiedzialny za tworzenie widoku) i przekazaćGame
do tego. W MVVM widzę, jak ważne jest, aby być odpowiedzialnym za tworzenie własnego modelu widoku (najlepiej przy użyciuViewModelLocator
), ale nie rozumiem, jak ten model widoku uzyskuje model.
We wszystkich przykładach, które znalazłem w Internecie, model widoku wykorzystuje niektóre usługi do pobierania własnych danych. Ale nie natknąłem się na żaden przykład, który akceptuje params konstruktora lub parametry przekazywane z wyższego poziomu nawigacji. Jak to się robi?
Nie chcę używać zasobu aplikacji ani innej metody przechowywania singletonu w moim modelu, ponieważ nie to robię, ale co jeśli chciałbym wyświetlić wiele łamigłówek na ekranie naraz? KażdyGameView
powinien zawierać własneGame
.
Nie tylkoGameViewModel
potrzebuję odniesienia doGame
model, aleBoardViewModel
który został w jakiś sposób utworzony (patrz pytanie 1) potrzebuje odniesienia doBoard
model należący doGame
Model. To samo dotyczy wszystkichTiles
. Jak wszystkie te informacje są przekazywane w łańcuchu? Czy mogę wykonać tak dużo ciężkiego podnoszenia w całości w XAML, czy będę musiał wykonać jakiś rodzaj powiązania lub innej inicjalizacji w kodzie?
Uff!
Doceniam każdą radę, której możesz udzielić, nawet jeśli nie jest to pełna odpowiedź. Chciałbym również znaleźć przykłady projektów MVVM, które dzielą podobne wyzwania z moimi. Dzięki tona!