У меня есть ViewModel под названием MainWindowViewModel.В этом у меня есть свойство, которое показывает модальное окно при возникновении ошибки.Это работает нормально, если во время запуска возникает ошибка.
Когда ошибка возникает после запуска, в SubViewModel я вызываю параметризованный конструктор в MainWindowViewModel.
MainWindowViewModel.cs
public MainWindowViewModel()
{
if (!isServerRunning)
{
this.ModalWindow = new LogViewModel("Server is down.");
}
else
{
this.ModalWindow = new LogViewModel();
}
}
public MainWindowViewModel(string logMessage)
{
this.ModalWindow = new LogViewModel(logMessage);
}
public LogViewModel ModalWindow
{
get
{
return _modalWindow;
}
set
{
_modalWindow = value;
OnPropertyChanged("ModalWindow");
}
}
MainWindow.xaml
....
<Grid>
<vw:LogView Content="{Binding Path=ModalWindow}"/>
</Grid>
MainWindowViewModel isпривязан к MainWindow.xaml
SubViewModel привязан к SubView.xaml
MainWindow.xaml загружает несколько представлений, одним из которых является SubView.
В App.xaml Я создал экземпляр ViewModel и привязал его к MainWindow.
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MainWindow mainWindow = new MainWindow();
MainWindowViewModel viewModel = new MainWindowViewModel();
mainWindow.DataContext = viewModel;
mainWindow.Show();
}
Я понял, чтомодальное окно появляется, когда после запуска возникает ошибка, если я создаю свойство модального окна в SubViewModel и связываю его с SubView.Но это не нормально, так как SubView - это всего лишь DockPanel, покрывающий 1/4 MainWindow.Т.е. 1/4 покрыта только модальным окном вместо всего MainWindow.
Я не уверен, почему модальное окно не появляется в MainWindow, когда я вызываю параметризованный конструктор из SubViewModel.Когда я отлаживаю, я вижу, что часть _modalWindow = value;
имеет правильные значения, но в любом случае модальное окно не появляется.
Я связываю ViewModel с Datacontext MainWindow.Вероятно, поэтому я вижу модальное окно, когда при запуске возникает ошибка.Для ошибок после запуска: Должен ли я (из SubViewModel, где я вызываю параметризованный конструктор в MainWindowViewModel) снова выполнить какую-то привязку к текстовому тексту Mainwindow?Как лучше всего это сделать, не создавая новый экземпляр MainWindow?Потому что MainWindow следует создавать только один раз.
Любая помощь очень ценится.