【发布时间】:2011-09-14 12:31:22
【问题描述】:
我有一个名为 MainWindowViewModel 的 ViewModel。在这个我有一个属性,当发生错误时显示一个模式窗口。只要在启动过程中发生错误,它就可以正常工作。
当启动后出现错误时,在 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 绑定到 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 只是一个覆盖 MainWindow 1/4 的 DockPanel。 IE。 1/4 只覆盖了一个模态窗口,而不是整个 MainWindow。
当我从 SubViewModel 调用参数化构造函数时,我不确定为什么模式窗口没有出现在 MainWindow 中。当我调试时,我看到_modalWindow = value; 部分具有正确的值,但无论如何模式窗口都不会显示。
我将 ViewModel 绑定到 MainWindow 的 Datacontext。这可能就是为什么我在启动时出现错误时看到模态窗口的原因。对于启动后的错误:我(从我在 MainWindowViewModel 中调用参数化构造函数的 SubViewModel)是否必须再次对 Mainwindow 的数据上下文进行某种绑定?在不必创建 MainWindow 的新实例的情况下,最好的方法是什么?因为 MainWindow 应该只创建一次。
非常感谢任何帮助。
【问题讨论】:
标签: c# wpf data-binding mvvm datacontext