-1

我正在使用 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)。

感谢您的专业知识。

4

1 回答 1

1

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

于 2013-11-11T09:20:57.743 回答