Caliburn micro ShowDialog不会第二次出现

时间:2014-07-14 21:41:04

标签: dependency-injection inversion-of-control caliburn.micro showdialog

我正在开发一个应用程序,它在启动应用程序之前有一个启动画面,然后是一个登录屏幕。我正在使用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>();
}

1 个答案:

答案 0 :(得分:0)

您需要在cmSplashScreenViewModel中调用TryClose()

下面的代码可以显示两次登录窗口(第一次登录后关闭)

 var login = this.container.GetExportedValue<LoginViewModel>();
 var windowManager = IoC.Get<IWindowManager>();
 windowManager.ShowDialog(login);
 windowManager.ShowDialog(login);