Управление несколькими видами WPF в приложении

Итак, я видел, что в WPF существует служба навигации для поддержания потока через приложение. Я не нахожусь на рынке для функций back и forward типа. Я просто ищу хороший способ переключения между представлениями при нажатии кнопки на конкретном представлении. Я использую MVVM, поэтому я не уверен, могу ли я позволить App.xaml.cs возможно содержать копию каждого View или ViewModel и позволить вызову команды ViewModel в App.xaml.cs выполнить переключение. Возможно, мне нужно просто обработать событие Click на кнопке и сделать некоторый вкус этого. Close(); NewWindow.Show();.
Как и во многих вещах в WPF, это не интуитивно для меня, хотя, вероятно, есть несколько простых решений.

Спасибо!

Ответ 1

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

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

Когда я прошел тот же процесс, что и сейчас, я нашел множество примеров этого же базового шаблона. Я просто закончил свой собственный.

Ответ 2

Для решения этой проблемы необходимо ввести Контроллеры, которые отвечают за рабочий процесс приложения. Они создают, показывают и закрывают несколько представлений в приложении.

Как это работает, можно увидеть в примерных приложениях проекта WPF Application Framework (WAF).