Ответ 1
Я создал класс "оконный загрузчик", который создает класс приложения при запуске приложения. У окна-загрузчика есть словарь, который поддерживает ассоциацию типов модели просмотра и типов вида. Он также имеет метод, который принимает экземпляр модели представления, разрешает представление, основанное на типе модели представления, запускает представление, устанавливает вид datacontext представления в модель представления, а затем показывает его. Окно-загрузчик также регистрирует событие в модели представления, которое возникает, когда окно хочет закрыть.
Окно-загрузчик реализует интерфейс IWindowLoader, и ссылка на него хранится в каждой модели представления (когда оконный загрузчик создает экземпляр модели представления, он присваивает себя публичному свойству IWindowLoader в модели представления). Таким образом, любая модель просмотра может отображать любую другую модель представления, не зная о представлениях и не демонстрируя себя. Кроме того, загрузчик окон можно легко высмеять для тестирования.
Когда я прошел тот же процесс, что и сейчас, я нашел множество примеров этого же базового шаблона. Я просто закончил свой собственный.