【问题标题】:How to display a view from a module in the view of another module?如何在另一个模块的视图中显示一个模块的视图?
【发布时间】:2016-05-18 11:37:40
【问题描述】:

我实际上正在为一个使用 PRISM 和 Unity 的项目工作,我遇到了模块之间的交互问题。

项目的架构实际上是这样的:

App
 -AppModuleA (Layout)
 -AppModuleB
 -AppModuleC
 -AppModuleD

应用程序实际上是这样的:

如果我将模块添加到主区域,它会作为窗格添加,因为主区域是 Infragistics 的 XamDockManager。它还会每次调用 AppModuleA 作为主布局,因此会多次实例化它。

我想要做的实际上是向 AppModuleA 的 XamDockManager 添加一个显示 ContentPane 的 AppModuleB(或 C 或 D)视图,我该如何做到这一点?

我阅读了 PRISM 教程 there,但我没有找到如何去做(即使在第 8 部分中说它是可能的)

此外,在由松散耦合的模块组成的复合应用程序中,视图通常会在单独的模块中定义。需要以一种不会在模块之间引入紧密耦合和依赖关系的方式来识别各个视图。

任何帮助将不胜感激,如果您发现这还不够,请随时向我询问更多信息。

提前谢谢你。

【问题讨论】:

  • 不确定,如果我明白了,您希望 AppModuleB 的视图出现在 AppModuleB 的视图中吗?在 AppModuleA 的视图中放置一个区域,并让 AppModuleB 在该区域中注入其视图(当然,它们都必须知道该区域的名称,这应该在两个模块都知道的程序集中定义)。
  • @Haukinger 谢谢你的回答。如果我在 AppModuleA 的视图中放置一个区域,我还可以多次实例化这个模块,每个选项卡都在内部显示具有不同模块(B、C、D 等)的区域吗?
  • 区域需要有唯一的名称......即使没有,你的模块 B、C、D 怎么知道他们应该使用 A 的哪个实例?
  • 那么我可以在每次实例化 AppModuleA 时为区域指定不同的名称吗?根据this document看来是可以的
  • "使用代码添加区域 [...]下面的代码示例展示了如何从代码隐藏文件中向控件添加区域。[...]" 所以模块 B 添加由模块 A 创建的视图中的外壳视图?然后模块 B 可以传递区域的名称,它将把他自己的视图注入到创建布局的服务中,以注入到 shell 中,我想。

标签: c# unity-container prism


【解决方案1】:

首先,我们需要澄清一些术语。您没有向您的区域添加模块。所以你不要将 AppModuleA 添加到你的主区域。相反,您的应用程序会将模块加载到它的应用程序域中,这将使您能够访问模块中的视图和逻辑。现在,您可以使用视图注入、视图发现或导航将视图注入到区域中。您的模块不必相互了解即可执行此操作。

对于碰巧包含区域本身的视图的多个实例,您必须使用所谓的作用域区域。

您应该观看这些课程以帮助您更好地理解这些概念:

这些将为您提供充分了解您正在尝试构建的内容所需的知识。

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2010-12-21
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多