我正在尝试设置一个允许打开同一窗口(shell)的多个实例的应用程序。我有一个主 shell(由 Bootstrapper 设置),我可以从中打开第二个 shell 的新实例。第二个 shell 包含多个区域。
现在有一个问题,因为给定区域只能在每个应用程序(或 RegionManager)中出现一次,所以我尝试为每个 shell 提供自己的 RegionManager。这似乎工作正常,但是我还使用 Unity 将 RegionManager 注入(inject)到我的 ViewModels/Controllers 中,这意味着我总是获得主 shell 的实例,而不是绑定(bind)到 ViewModel 所属 shell 的实例。
是否有可能使这项工作成功?这对于我的用例来说是正确的方法吗?
最佳答案
有几种方法可以解决这个问题。也许最简单的方法是使用 Scoped RegionManager: https://msdn.microsoft.com/en-us/library/ff921162.aspx http://southworks.com/blog/2011/11/30/prism-region-navigation-and-scoped-regions/
另一个是您可以将 IRegionManager 的命名实例(每个 shell 窗口一个)注册到容器中,并按名称解析这些实例。但只有当依赖于这些命名实例的 ViewModels/Services 只能在一个或另一个窗口中创建时,这才真正有效。
另一种方法是为每个窗口创建一个子容器,并将单独的 RegionManager 实例注册到每个子容器中,以便尝试解析窗口内的实例会违背该窗口的区域管理器。
关于c# - 实例化 PRISM shell 的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33010756/