Pracuję nad stworzeniem mojej pierwszej gry przy użyciu C# i XAML dla Windows 8. Wciąż uczę się podstawowych pojęć i najlepszych praktyk, a MVVM było przeszkodą. Spróbuję zadać to pytanie w dwóch częściach.MVVM i View/ViewModel hierarchy
Tło
Gra Robię to Sudoku. Sudoku ma planszę zawierającą 9x9 siatki płytek. Mam trzy modele - Game
, Board
i Tile
. Po utworzeniu Game
automatycznie tworzy on Board
, a po utworzeniu Board
tworzy 81 (9x9) .
1. Czy w hierarchii widoków tworzone są odpowiednie modele widoku?
Aby dopasować hierarchii modeli, chciałbym mieć hierarchię widoków (GameView
zawiera BoardView
który zawiera 81 TileViews
). W XAML łatwo jest utworzyć tę hierarchię widoków za pomocą elementów sterujących użytkownika, ale nie rozumiem, w jaki sposób tworzone są modele widoku.
W przykładach, które widziałem, kontekst danych kontrolki użytkownika jest często ustawiony na model widoku (przy użyciu ViewModelLocator
jako źródła), który tworzy świeże wystąpienie modelu widoku. Wydaje się to działać dobrze, jeśli masz płaski widok, ale wydaje ci się, że robi się brudny, kiedy masz hierarchię. Czy model GameView
tworzy i pozostawia go dziecku BoardView
, aby utworzyć BoardViewModel
? Jeśli tak, w jaki sposób komunikuje się z urządzeniem ? Czy BoardViewModel
może komunikować się z powrotem w hierarchii do ?
2. W jaki sposób model widoku otrzymuje dane modelu?
W iOS, zacznę od używania usługi do pobrania modelu Game
, który został wstępnie wypełniony danymi. Chciałbym następnie utworzyć kontroler widoku GameViewController
(który był odpowiedzialny za tworzenie widoku) i przekazać do niego Game
. W MVVM widzę, że wartość w widoku jest odpowiedzialna za tworzenie własnego modelu widoku (najlepiej przy użyciu ViewModelLocator
), ale nie rozumiem, jak ten model widoku otrzymuje model.
We wszystkich przykładach, które znalazłem online, model widoku korzysta z niektórych usług do pobierania własnych danych. Ale nie natknąłem się na żaden przykład, który akceptuje parametry konstruktora lub parametry przekazane z wyższego poziomu nawigacji. Jak to się robi?
Nie chcę używać zasobu aplikacji lub jakiegoś innego rodzaju sposobu przechowywania pojedynczego modelu dla mojego modelu, ponieważ nie to robię, ale co, gdybym chciał wyświetlać jednocześnie wiele zagadek na ekranie? Każdy kod GameView
powinien zawierać własny kod Game
.
Nie tylko potrzebują odniesienie do modelu Game
, ale BoardViewModel
że powstał jakiś sposób (patrz pytanie 1) potrzebuje odniesienie do modelu Board
należącym do modelu Game
. To samo dotyczy wszystkich modeli . W jaki sposób wszystkie te informacje przekazywane są w łańcuchu? Czy mogę wykonać tak dużo podnoszenia całkowicie w XAML, czy też będę musiał wykonać jakieś powiązanie lub inną inicjalizację w kodzie?
Uff!
Doceniam każdą poradę, którą można udzielić, nawet jeśli nie jest to pełna odpowiedź. Chciałbym także znaleźć przykłady projektów MVVM, które mają podobne wyzwania do mojego. Dzięki za tonę!
Myślę, że mówisz o problemie zagnieżdżonych kontroli użytkownika (zobacz http://catel.catenalogic.com/index.htm?gs_viewscontrols_nested_user_controls_problem.htm). 01/Catel nie jest jeszcze dostępny dla WinRT (jest to wersja beta), ale możesz przynajmniej zrozumieć, jak myślę, że należy to zrobić. –