Что-то, что меня пугает MVVM, - если я использую первый подход к построению объектов (это, по-видимому, самый распространенный подход, по крайней мере после многократного чтения и поиска), как мне получить контекстуальную информацию в viewmodel?
Я видел много ответов на подобные вопросы: "используйте контейнер DI, чтобы ввести вашу модель", но это меня не помогает, поэтому я приведу небольшой пример.
Скажем, мое приложение является PeopleEditor. Он был создан для загрузки и редактирования объектов People, которые являются сложными. Когда вы загружаете приложение, вы получаете домашний экран, который загружает кучу людей в память - пусть говорят, что все они доступны через коллекцию, которую я могу получить из своего контейнера. Нажимая на Person, вы попадаете на экран редактора. Редактор является сложным, поэтому это не тривиальный просмотр мастер-детали, реализованный на одном экране.
Итак, на главном экране, когда я нажимаю человека, приложение должно создать новый view и viewmodel и показать представление. Если я сначала создаю viewmodel, через контейнер или нет, я могу инициализировать его соответствующим объектом person. Это кажется мне очень естественным, поэтому мне трудно понять, почему первый взгляд кажется преобладающим. Как мне это сделать, используя первый подход? Представление создало бы viewmodel, которая может попасть в коллекцию People, но не знает, кто ее редактирует. EDIT для ясности: Редакторы нескольких людей могут существовать одновременно, каждый из которых редактирует другого человека.
В эталонной реализации Prism 4.0 alpha MVVM используется "обработчик состояния", который в основном является сервисом, который приложение использует для хранения параметра конструктора в контейнере. Он сохраняет состояние и вызывает ShowView, и модель представления, которая в конечном итоге создается, импортирует объект состояния. Для меня это кажется неуклюжим - похоже, он пытается притворяться, что он слабо связан, когда это действительно не так. Есть ли у кого-нибудь другие рекомендации?