启动显示模式窗口,后跟标准窗口

时间:2013-11-10 23:40:48

标签: wpf mvvm

我正在使用App.xaml.cs中的代码启动MVVM应用程序,如下所示:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    //Set data directory
    string baseDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\BlowTrial";
    if (!Directory.Exists(baseDir))
    {
        Directory.CreateDirectory(baseDir);
    }
    AppDomain.CurrentDomain.SetData("DataDirectory", baseDir);

    //Application initialisation
    AutoMapperConfiguration.Configure();

    //Security
    CustomPrincipal customPrincipal = new CustomPrincipal();
    AppDomain.CurrentDomain.SetThreadPrincipal(customPrincipal);

    // Create the ViewModel to which 
    // the main window binds.
    var mainWindowVm = new MainWindowViewModel();
    MainWindow window = new MainWindow(mainWindowVm);

    // When the ViewModel asks to be closed, 
    // close the window.
    EventHandler handler = null;
    handler = delegate
    {
        window.Close();
        if (!window.IsLoaded) //in case user cancelled close event
        {
            mainWindowVm.RequestClose -= handler;
        }
    };
    mainWindowVm.RequestClose += handler;

    window.Show();
}

我想测试是否存在包含运行应用程序的重要数据的实体,如果这些实体不存在,请运行一个向导(作为对话框)来获取这些设置:

if (BlowTrialDataService.GetBackupDetails().BackupData == null
           || !_repository.LocalStudyCentres.Any())
{
      DisplayAppSettingsWizard();
}

static void DisplayAppSettingsWizard()
{
    //testfor and display starup wizard
    var wizard = new GetAppSettingsWizard();
    GetAppSettingsViewModel appSettings = new GetAppSettingsViewModel();
    wizard.DataContext = appSettings;
    EventHandler wizardHandler = null;
    wizardHandler = delegate
    {
        wizard.Close();
        wizard = null;
        appSettings.RequestClose -= wizardHandler;
    };
    appSettings.RequestClose += wizardHandler;
    wizard.ShowDialog();
}

当我将此代码放在MainWindow.xaml.cs中时,应用程序正确运行。当它放在App.xaml.cs中(在实例化MainWindow实例的代码之前)或MainWindowViewModel的构造函数中时,向导会正确显示,但应用程序结束时不会在完成向导时显示MainWindow。如果没有显示向导的原因,MainWindow在所有情况下都会正确显示。

检查调试输出,没有注释错误(一些与sql命令相关的第一次机会异常)。

是否有这样的理由 - 让MainWindow.xaml背后的代码中的代码看起来不是最合乎逻辑的地方(我认为它应该是app.xaml.cs)。

感谢您的专业知识。

1 个答案:

答案 0 :(得分:1)

ShutdownMode 的默认值是System.Windows.ShutdownMode.OnLastWindowClose,这意味着如果最后一个窗口关闭,App将关闭。 你没有在这里放入所有代码,我想在主窗口关闭之前设置向导窗口没有显示,这个引导app退出。 我建议您将shutdownmode设置为OnExplicitShutdown,您可以自行决定何时关闭应用程序。