我有一个问题:带有注入服务的弹出窗口应该在shell加载后引发,它类似于登录表单,所以我在shell上的"loaded"事件中引发它。
<i:EventTrigger EventName="Loaded">
<interactivity:InvokeCommandAction Command="{Binding OnShellLoadedCommand}"/>
</i:EventTrigger>
它发生在引导程序中的CreateShell()之后
protected override DependencyObject CreateShell()
{
return Container.Resolve<Shell>();
}
棱镜的服务还好,但共享服务出现了问题,因为模块在CreateShell()之后加载,我得到了异常。什么是好的程序如何在加载外壳后弹出?
您需要重新思考如何显示登录屏幕。如果您的服务存在于一个模块中,那么在加载并向容器注册之前,显然无法创建和使用它。所以你有几个选择。将登录弹出窗口移动到模块中的一个视图中,并在IModule show/initialize中使用RegisterViewWithRegion的视图上放置触发器。然后使用该视图的已加载事件。我会在实际显示shell之前显示您的登录对话框。如果登录成功,则显示Shell,如果登录失败,则可以关闭应用程序。无论哪种方式,都不能使用尚未加载的服务。因此,将您的登录弹出窗口移动到包含该服务的模块中,或者将登录服务移动到shell中,以便在加载shell时使用它。