Я работаю над своей первой игрой, использующей С# и XAML для Windows 8. Я все еще изучаю основные концепции и лучшие практики, и MVVM является препятствием. Я попытаюсь задать вопрос в двух частях.
Фон
Игра, которую я делаю, это судоку. Судоку имеет доску, которая содержит сетку из 9x9 плиток. У меня три модели - Game
, Board
и Tile
. Когда создается Game
, он автоматически создает Board
, а когда создается Board
, он создает 81 (9x9) Tiles
.
1. С иерархией представлений, как создаются соответствующие модели представлений?
Чтобы соответствовать иерархии моделей, я хотел бы иметь иерархию представлений (GameView
содержит BoardView
, который содержит 81 TileViews
). В XAML довольно легко создать эту иерархию представлений с помощью пользовательских элементов управления, но я не понимаю, как создаются модели представлений.
В примерах, которые я видел, контекст данных пользовательского элемента управления часто устанавливается в модель представления (используя ViewModelLocator
в качестве источника), который создает новый экземпляр модели представления. Кажется, это хорошо работает, если у вас есть плоский вид, но также кажется, что он становится беспорядочным, когда у вас есть иерархия. Создает ли GameView
GameViewModel
и оставляет его до своего дочернего элемента BoardView
для создания BoardViewModel
? Если да, то как GameViewModel
взаимодействует с BoardViewModel
? Может ли BoardViewModel
связать резервную копию иерархии с GameViewModel
?
2. Как модель представления получает данные модели?
В iOS я бы начал с использования службы для извлечения модели Game
, которая была предварительно заполнена данными. Затем я создавал контроллер представления GameViewController
(который отвечал за создание представления) и передавал ему Game
. В MVVM я вижу, что значение имеет представление о создании собственной модели представления (в идеале с использованием ViewModelLocator
), но я не понимаю, как эта модель представления получает модель.
Во всех примерах, которые я нашел в Интернете, модель представления использует некоторую услугу для извлечения собственных данных. Но я не сталкивался ни с одним примером, который принимает параметры конструктора или параметры, передаваемые с более высокого уровня навигации. Как это делается?
Я не хочу использовать ресурс приложения или какой-то другой метод хранения одноэлементной модели для своей модели, потому что, не то, что я делаю, но что, если бы я хотел отображать сразу несколько головоломок на экране? Каждый GameView
должен содержать свой собственный Game
.
Не только GameViewModel
нужна ссылка на модель Game
, но BoardViewModel
, которая была каким-то образом создана (см. вопрос 1), нуждается в ссылке на модель Board
, которая принадлежит Game
модель. То же самое относится ко всем Tiles
. Как вся эта информация передается по цепочке? Могу ли я сделать этот очень тяжелый подъем полностью в XAML, или мне придется делать какую-то привязку или другую инициализацию в коде?
Уф!
Я ценю любые советы, которые вы можете дать, даже если это не полный ответ. Я также хочу найти примеры проектов MVVM, которые имеют сходные проблемы для моих собственных. Спасибо тонну!