我对 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/