public class AppViewModel
{
private IDependencyWhatever; //I have all the dependencies, because I am the application which rules them all
private MainWindow main;
public void OnLoad()
{
this.mainVM = new MainWindowViewModel(...)
this.main = new MainWindow(mainVM)
this.mainVM.NewWindowButtonClicked += this.OpenSubWindow
}
private List<SubWindow> subWindows
public ICommand OpenSubWindow() //are ICommands still a thing?
{
//whatever, you have access to all dependencies
this.subwindows.Add(new SubWindow(new SubWindowViewModel(...)) //keep track so we have a reference
}
}
Эта "ViewModel" может не иметь вида, возможно, мы можем просто использовать App.cs или что-то еще, но она хранит ссылки на все в приложении и предотвращает ваш сценарий с сиротливыми всплывающими окнами/диалогами, которые не имеют возможности получить зависимости или взаимодействовать с частями приложения, не находящимися на той же ветви дерева модели представления.
Рекомендую посмотреть эти видео для лучшего погружения в вопрос: