【问题标题】:Scoped Regions and View discovery范围区域和视图发现
【发布时间】:2014-02-07 14:08:19
【问题描述】:

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

当我的视图模型的IsActive 属性设置为true 时,我想刷新串行端口名称列表。这很高兴在一个样本中实现,但现实是……不同的。

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

我想为此使用SyncActiveAwareAttribute,但它需要范围区域。

我需要在这里使用视图注入 (regionmanager.Regions["blahblah"].Add(....) 还是可以使用视图发现 (regionManager.RegisterWithRegion(...) 让它工作?

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

鉴于其他模块需要引用范围内的 IRegionManager 实例才能注入它们的视图:

  1. 让区域经理进入其他模块的最佳方式是什么?
  2. 何时应进行注入以确保该区域存在?
  3. 我可以混合和匹配注入和发现吗?我想避免大的重构。

【问题讨论】:

    标签: prism prism-4


    【解决方案1】:

    为了创建Scoped Regions,您需要使用视图注入。相关信息可在以下 MSDN Prism Chapter #7 链接中找到:

    Scoped Region Manager 是通过将 createScopeRegionManager 重载参数设置为 Region.Add( ) 方法。您将在通常添加或注册 ViewsRegions 的相同位置执行此操作,例如在相应模块的 initialize() 方法:

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

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

    在不会显示Scoped Regions的其他Views注册上使用View Discovery应该不会有任何问题。

    希望对你有帮助,

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2016-08-27
      • 2013-12-26
      相关资源
      最近更新 更多