ИМХО: Это еще одна ситуация, когда простое добавление контроллеров в MVVM решит все проблемы без проблем.Мы называем это MVCVM (позор, который не соответствует действительным римским цифрам):)
Шаблон, который мы успешно используем во всех недавних проектах, заключается в регистрации контроллеров только в модулях и инициализацииих при запуске.Контроллеры очень легкие / тонкие, и единственное, что нужно для работы приложения , для прослушивания или отправки сообщений .В своих методах инициализации они затем регистрируют все, что им нужно (представления и модели представления и т. Д.).Этот легкий шаблон логики «только в памяти» также подходит для более тонких приложений (например, лучше для WP7).
Проблема с использованием виртуальных машин, как вы обнаружили, заключается в том, что в конечном итоге вы сталкиваетесь с ситуациями, когда им необходимознать о представлениях (это единственное, о чем они никогда не должны знать).
Основные правила, которым мы следуем:
- Контроллеры принимают решения на основе событий
- Контроллеры извлекают данные и помещают их в соответствующие свойства View Model
- Контроллеры устанавливают свойства ICommand моделей View для перехвата событий
- Контроллеры позволяют отображать представления (если не указано в другом месте)
- ViewМодели "тупые".Удерживаемые данные для привязки и ничто иначе
- Представления знают, что они отображают определенную форму данных, но не имеют представления, откуда они берутся
Последние дваточки - это те, которые вы никогда не должны нарушать, или разделение интересов выходит за пределы окна.
Пока у вас есть потребность в том, чтобы ваша виртуальная машина имела прямой доступ к базе данных (плохо), ваши виртуальные машины получаютпредставления (очень плохие) и требование, чтобы ваша виртуальная машина открывала другое окно (безумно плохое).
Подумайте об этом.Вы можете (повторно) представить контроллеры своим приложениям MVVM.Если вам нужна дополнительная информация, просто спросите.