我对 MVVM 比较陌生。我目前的问题是一个模块化对话框,它应该在开始时“自动启动”。

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

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

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

你有什么建议吗?谢谢。

最佳答案

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

像这样的东西:

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

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

关于wpf - 用于在 MVVM 中进行配置的对话框窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7384203/

10-16 03:52