我正在使用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)。
感谢您的专业知识。
答案 0 :(得分:1)
ShutdownMode 的默认值是System.Windows.ShutdownMode.OnLastWindowClose,这意味着如果最后一个窗口关闭,App将关闭。 你没有在这里放入所有代码,我想在主窗口关闭之前设置向导窗口没有显示,这个引导app退出。 我建议您将shutdownmode设置为OnExplicitShutdown,您可以自行决定何时关闭应用程序。