@hax
junior developer

Как переключаться между окнами в WPF с паттерном MVVM?

Всем привет!

1) Как из одной вью модели открыть вью другой вьюмодели? Ведь по факту во вьюмодели не должно храниться референсов на вью, тогда каким образом вызвать прорисовку другой формы?
2) Как в таком случае можно передать данные между вьюхами? К примеру, у меня есть вьюха, на которой расположена кнопка "Настройки". По нажатию на эту кнопку, открывается отдельное окно с настройками и по нажатию на кнопку "Ок" второго окна, оно закрывается и результат передаётся в первое окно. Как в рамках MVVM это можно реализовать?
  • Вопрос задан
  • 1532 просмотра
Пригласить эксперта
Ответы на вопрос 3
SpacePurr
@SpacePurr
c#, wpf
Попробуйте посмотреть здесь Ссылка

p.s.
Я сейчас сам изучаю шарп, пишу небольшую программу для работы с Компас 3Д и тоже столкнулся с реализацией открытия новых окон на MVVM, однако ради одного окна я не стал надолго уходить в изучение сервисов навигации и просто создал объект нужного окна в MainViewModel и вызвал у него ShowDialog(), а NewViewModel нового окна привязана к View через DataContext как обычно это делается.
NewWindow window = new NewWindow();
window.ShowDialog();

Для обмена информацией между разными VIewModel использую классы со статическими конструкциями.

Удачи в изучении.
Ответ написан
Комментировать
@OwDafuq
Прочитайте про DI и Prism.
Ответ написан
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
Для таких случаев делают сервис навигации с какой-то логикой показа окон или страниц и каким то образом прокидывают его во вьюмодель. Что бы не работать с конкретным типом обычно прокидывают интерфейс который реализует сервис навигации. На гитхабе примеров полно.
Ну и да, подход описанный мной, без depency injection, даже в относительно небольших проектах, может привести к головной боли. Готовые MVVM-фреймворки часто этот сервис навигации уже реализуют.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы