Я сталкивался с подобными проблемами. Вот как я их решил и почему я сделал то, что сделал.
Мое решение:
Мой MainWindowViewModel имеет свойство типа ModalViewModelBase, называемое Modal.
Если мой код нуждается в определенном представлении, чтобы быть модальным, он помещает ссылку на него в это свойство. MainWindowView отслеживает это свойство с помощью механизма INotifyPropertyChanged. Если для Modal установлено значение некоторой виртуальной машины, класс MainWindowView возьмет виртуальную машину и поместит ее в окно ModalView, где соответствующий элемент UserControl будет отображаться с помощью магии DataTemplates, окно отображается с использованием ShowDialog. ModalViewModelBase имеет свойство для DialogResult и свойство с именем IsFinished. Когда для модальной виртуальной машины IsFinished установлено значение true, представление закрывается.
У меня также есть несколько специальных приемов для создания таких интерактивных вещей из потоков фоновых рабочих, которые хотят запросить у пользователя ввод.
Мои рассуждения:
Принцип модальных представлений заключается в том, что другие виды отключены, а модальные отображаются. Это часть логики взгляда, которая по сути не выглядит. Вот почему у меня есть свойство для этого в MainWindowViewModel. Если бы я пошел дальше, я должен сделать все остальные свойства или команды для всех других ВМ в исключениях выброса Основной ВМ, находясь в модальном режиме, но я чувствую, что это излишне.
Механизм View, фактически запрещающий пользователю любые другие действия, не должен выполняться с помощью всплывающего окна и showdialog, возможно, вы поместили модальное представление в существующее окно, но отключили все остальные или некоторые другие вещь. Эта логика, связанная с представлением, относится к самому представлению. (То, что типичный разработчик не может кодировать эту логику, кажется второстепенным. Нам всем иногда нужна помощь.)
Так вот, как я это сделал. Я предлагаю это только как предложение, возможно, есть и другие способы думать об этом, и я надеюсь, что вы также получите больше ответов.