Я создал класс «оконного загрузчика», который создается классом приложения при запуске приложения. У оконного загрузчика есть словарь, который поддерживает связь типов моделей представлений и типов представлений. У него также есть метод, который принимает экземпляр модели представления, разрешает представление на основе типа модели представления, мгновенно отображает представление, устанавливает текст данных представления в модель представления и затем показывает его. Загрузчик окна также регистрирует событие в модели представления, которое возникает, когда окно хочет закрыться.
В загрузчике окон реализован интерфейс IWindowLoader, и ссылка на него сохраняется в каждой модели представления (когда загрузчик окон создает экземпляр модели представления, он назначает себя общедоступному свойству IWindowLoader в модели представления). Таким образом, любая модель представления может привести к отображению любой другой модели представления, не зная о представлениях и не делая само отображение. Кроме того, оконный загрузчик может быть легко издеваться для тестирования.
Когда я прошел через тот же процесс, что и вы сейчас, я обнаружил множество примеров того же базового паттерна. Я только что закончил кататься самостоятельно.