我是MVVM的新手。我目前的问题是模块化对话框,应该在开始时“自动启动”。
我已经按照WAF电子邮件客户端的示例进行模块化对话。唯一重要的是将对话框的所有者属性设置为应用程序主窗口的实例(当然,使用ShowDialog()而不是Show()显示窗口?
如果在没有配置的情况下关闭此对话框,应用程序将关闭。但是现在,如果我在visual studio designer模式下打开主窗口,就会出现配置对话框,如果我关闭它,Visual Studio会崩溃。 这是因为我在主窗口视图模型的构造函数中调用了配置对话框的ShowDialog()。
为了避免这种情况,我可以检查DesignerProperties.IsInDesignTool属性,但这更像是一种好的代码风格,对吧?
你有什么建议吗?感谢。
答案 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。在另一个方向上应该没有联系。