Scoped Regions和View发现

时间:2014-02-07 14:08:19

标签: prism prism-4

我有一个相当大的棱镜应用程序,我正在尝试应用新功能。该功能是串行端口参数选择。

当viewmodel的IsActive属性设置为true时,我想刷新串口名称列表。这在样本中很愉快,但现实是......不同的。

我正在修改的视图包含在ItemsControl(标记为"SettingsRegion")中,该"PageRegion"包含在父区域(标记为SyncActiveAwareAttribute)中。设置区域包含其他模块的设置视图。

我想使用regionmanager.Regions["blahblah"].Add(....,但它需要范围区域。

我是否需要在此处使用视图注入(regionManager.RegisterWithRegion(...),还是可以使用视图发现(IRegionManager)使其工作?

如果我必须使用注射......

鉴于其他模块需要引用作用域{{1}}实例才能注入其视图:

  1. 如何让区域经理到其他模块?
  2. 应该何时进行注射以确保该区域存在?
  3. 我可以将注射与发现混合搭配吗?我想避免使用大型重构。

1 个答案:

答案 0 :(得分:3)

要创建范围区域,您需要使用View注入。相关信息可在以下 MSDN Prism第7章链接中找到:

通过在 Region.Add上将 createScopeRegionManager 重载参数设置为 true ,返回范围区域管理器( ) 方法。您可以在通常添加的相同位置执行此操作,或将视图注册到区域,例如相应模块的 initialize() < / strong>方法:

IRegionManager scopedRegionManager = scopedRegion.Add(view, null, createScopeRegionManager);

然后,将 scopedRegionManager 共享给其他模块的一种可能方法是使用 scopedRegionManager 发布() 一个事件作为参数。但是,您应该注意Module依赖项和Modules实例化顺序。 另一种方法是将 scopedRegionManager 存储到例如 Dictionary 中。您可以在以下 CodePlex 主题中找到更多相关信息:

在其他视图注册中使用视图范围注册不会出现 Scoped Regions ,这不应该是任何问题。

我希望这能帮到你,

问候。