MVVM и иерархия View / ViewModel

Я работаю над созданием моей первой игры с использованием C # и XAML для Windows 8. Я все еще изучаю основные концепции и лучшие практики, и MVVM стал препятствием. Я попытаюсь задать вопрос в двух частях.

Background

Игра, которую я делаю, - Судоку. У Судоку есть доска с 9x9 сеткой плиток. У меня три модели -Game, Board, а такжеTile, КогдаGame создается, он автоматически создаетBoardи когдаBoard создан, он создает 81 (9x9)Tiles.

1. With a hierarchy of views, how are corresponding view models created?

Чтобы соответствовать иерархии моделей, я хотел бы иметь иерархию представлений (GameView содержитBoardView который содержит 81TileViews). В XAML довольно легко создать эту иерархию представлений с помощью пользовательских элементов управления, но я не понимаю, как создаются модели представлений.

В приведенных мною примерах контекст данных пользовательского элемента управления часто задается моделью представления (с использованиемViewModelLocator в качестве источника), который создает свежий экземпляр модели представления. Кажется, это хорошо работает, если у вас плоский вид, но также кажется, что это становится грязным, когда у вас есть иерархия. ЛиGameView создатьGameViewModel и оставь это на усмотрениеBoardView ребенок, чтобы создатьBoardViewModel? Если да, то какGameViewModel общаться сBoardViewModel? Может лиBoardViewModel общаться обратно вверх по иерархии кGameViewModel?

2. How does a view model get model data?

В iOS я бы начал с использования службы для полученияGame модель, которая была предварительно заполнена данными. Я бы тогда создалGameViewController контроллер представления (который отвечал за создание представления) и передатьGame к этому. В MVVM я вижу ценность того, чтобы представление отвечало за создание своей собственной модели представления (в идеале с использованиемViewModelLocator), но я не понимаю, как модель представления получает модель.

Во всех примерах, которые я обнаружил в сети, модель представления использует некоторый сервис для извлечения своих собственных данных. Но я не встречал ни одного примера, который бы принимал параметры конструктора или параметры, передаваемые с более высокого уровня навигации. Как это сделать?

Я не хочу использовать для своей модели ресурс приложения или какой-либо другой тип одноэлементного хранилища, потому что я этого не делаю, а что, если я хочу отображать на экране несколько головоломок одновременно? каждыйGameView должен содержать свой собственныйGame.

Мало того, чтоGameViewModel нужна ссылка наGame модель, ноBoardViewModel который был каким-то образом создан (см. вопрос 1), нуждается в ссылке наBoard модель, которая принадлежитGame модель. То же самое касается всехTiles, Как вся эта информация передается по цепочке? Могу ли я сделать эту тяжелую работу полностью внутри XAML, или мне придется выполнить какое-то связывание или другую инициализацию в коде?

Phew!

Я ценю любой совет, который вы можете дать, даже если он не является полным ответом. Я также заинтересован в том, чтобы найти примеры проектов MVVM, в которых есть проблемы, схожие с моими. Благодаря тонну!

Ответы на вопрос(1)

Ваш ответ на вопрос