我正在使用 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)。
感谢您的专业知识。