我正在开发一个应用程序,它在启动应用程序之前有一个启动画面,然后是一个登录屏幕。我正在使用Caliburn Micro将所有东西捆绑在一起,但出于某种原因,我只能让Splash Screen出现。一旦启动画面完成加载,我调用secondWindow.ShowDialog(LogOnVM)
并且没有任何反应。如果我注释掉启动画面代码,登录屏幕确实显示正常。他们只是一个接一个地出现。
我在调用第二个Application.Windows.Count
后使用了ShowDialog
,并确实显示了1
的计数。 (在第一个对话框关闭后它是0
)所以我知道有一个表格在某个地方打开,但我看不到它或什么的。
我甚至尝试过创建WindowManager
的新实例,但也没有做任何事情。
我已经放置了:
var cmWindowManager = IoC.Get<IWindowManager>();
var cmSplashScreenViewModel = IoC.Get<SplashScreenViewModel>();
cmWindowManager.ShowDialog(cmSplashScreenViewModel);
var cmLogOnViewModel = IoC.Get<LogOnViewModel>();
var result = cmWindowManager.ShowDialog(cmLogOnViewModel);
以下是如何设置。我应该创建第二个SimpleContainer
protected override void Configure()
{
LogManager.GetLog = x => new DebugLog(x);
sc = new SimpleContainer();
sc.Singleton<IWindowManager, WindowManager>();
sc.Singleton<IEventAggregator, EventAggregator>();
sc.Singleton<IFakeStartupTask, FakeStartupTask>();
sc.PerRequest<SplashScreenViewModel>();
sc.Singleton<IMessageBoxService, MessageBoxService>();
sc.PerRequest<LogOnViewModel>();
}
答案 0 :(得分:0)
您需要在cmSplashScreenViewModel中调用TryClose()
下面的代码可以显示两次登录窗口(第一次登录后关闭)
var login = this.container.GetExportedValue<LoginViewModel>();
var windowManager = IoC.Get<IWindowManager>();
windowManager.ShowDialog(login);
windowManager.ShowDialog(login);