wpf - PRISM - 子区域 View 的重用 - 可以做到吗?

标签 wpf mvvm prism

我是一个 PRISM 新手,但我阅读了帮助文档,似乎无法找到如何实现以下功能(这是一个 WPF 应用程序)

我有一个 Shell(窗口),它有 2 个区域,名为“region1”和“region2”。 在我唯一的模块的 Initialize 方法中,我向每个区域注册相同的 View :

regionViewRegistry.RegisterViewWithRegion("Region1", typeof(View1));
regionViewRegistry.RegisterViewWithRegion("Region2", typeof(View1));

当我运行它时,此时一切正常,因为它创建了 View1 的 2 个单独实例,并在每个区域中放置一个实例。

现在在 View1 中,我已经声明了自己的区域来注入(inject)小型 subview

<ItemsControl Name="MainRegion" cal:RegionManager.RegionName="MainRegion" />

现在,当我运行非常简单的 PRISM 应用程序时,我收到以下异常消息:

"Region with the given name is already registered: MainRegion"

这表明如果该 View 声明了自己的区域,我就不能拥有同一 View 的多个实例。

这是正确的吗?

似乎是一个巨大的限制。

我希望我的应用程序是高度模块化的,并且让 View 由其他 View (通过区域)等组成。

或者我误读了文档?

最佳答案

您可以使用 RegionScope 将 shell 级区域与模块 View 创建的区域分开。您在没有范围的情况下创建的任何区域都是“全局”的,并且不支持在同一范围内拥有两个具有相同名称的区域。

您可以在这篇 MSDN 文章中阅读有关区域范围的更多信息: http://msdn.microsoft.com/en-us/magazine/cc785479.aspx#id0090126

关于wpf - PRISM - 子区域 View 的重用 - 可以做到吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4818840/

相关文章:

wpf - 用 Gjallarhorn 显示对话窗口的好方法是什么?

c# - WPF - ListView 更新非常零星

wpf - 在数据网格中绑定(bind)数据网格

c# - 在 WPF 延迟后重置变量值

.net - WPF的Binding引擎在转换值时有哪些特殊值?

silverlight - Caliburn Entity DataBinding 有趣

c# - 使用基础和MVVM通信在构造函数处进行C#继承

c# - 如何对在 MVVM 中调用异步方法的 DelegateCommand 进行单元测试

wpf - 根据 ViewModel 中的属性值禁用 XamDataGrid 的行

c# - 如何在 Prism wpf 模块化应用程序中首先使用代码动态创建数据库表?