用于MVVM中配置的对话窗口

时间:2011-09-12 06:48:00

标签: wpf mvvm

我是MVVM的新手。我目前的问题是模块化对话框,应该在开始时“自动启动”。

我已经按照WAF电子邮件客户端的示例进行模块化对话。唯一重要的是将对话框的所有者属性设置为应用程序主窗口的实例(当然,使用ShowDialog()而不是Show()显示窗口?

如果在没有配置的情况下关闭此对话框,应用程序将关闭。但是现在,如果我在visual studio designer模式下打开主窗口,就会出现配置对话框,如果我关闭它,Visual Studio会崩溃。 这是因为我在主窗口视图模型的构造函数中调用了配置对话框的ShowDialog()。

为了避免这种情况,我可以检查DesignerProperties.IsInDesignTool属性,但这更像是一种好的代码风格,对吧?

你有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:4)

这里的问题是你在类的构造函数中显示一个对话框。那是你不想做的事 我会这样解决:
不要在app.xaml中指定StartupUri,而是覆盖OnStartup。在那里检查是否应显示配置对话框。如果它应该显示,请显示它,然后在关闭后单击确定,显示主窗口。

这样的事情:

override void OnStartup(...)
{
    if(configurationNotComplete)
    {
        ConfigDialog cfg = new ConfigDialog();
        if(!(cfg.ShowDialog() ?? false))
        {
            Shutdown();
            return;
        }
    }
    MainWindow window = new MainWindow();
    window.Show();
}

您当前的方法还有另一个问题:ViewModel显示模式对话框。这意味着它至少知道一个视图:模式对话框的视图。 MVVM是一种方式:View了解ViewModel,ViewModel知道Model。在另一个方向上应该没有联系。