在 Wpf 应用程序中使用 Prism 进行导航
Posted
技术标签:
【中文标题】在 Wpf 应用程序中使用 Prism 进行导航【英文标题】:Using Prism for navigation in Wpf application 【发布时间】:2010-11-26 23:22:21 【问题描述】:我正在 Wpf 中开始一个新项目,现在正在考虑使用 Prism。现在我只是尝试使用 Prism 设置应用程序的导航。不幸的是,我缺乏该框架的经验,因此入门有点困难..
为了更准确地描述我的第一个挑战,我有一个带有“导航/菜单”区域和“主”区域的应用程序。对于所有不同的主要区域视图,导航区域都是相同的,因此我在 shell.xaml 中定义了菜单。单击任何菜单项时,我想使用 Prism 向该区域添加视图。第一的;这是一个通常会使用棱镜的东西吗?如果是这样的话;典型的方法是什么?我的意思是在结构层面上..
我的印象是 Prism 最终将使我的应用程序更具可扩展性,并且我看到我从中获得了一些其他优势 - 例如 IoC 容器。所以我想使用它 - 如果我只能完成第一步..
【问题讨论】:
【参考方案1】:我有一个示例,它使用了更多的 CAG 感觉,用于为菜单做出贡献的模块以及如何向区域添加视图。它应该让事情更清楚一点。
http://dl.getdropbox.com/u/376992/CAGMenus.zip
希望这会有所帮助, 安德森
【讨论】:
谢谢。我已经拿到了这个样品。我得到了这些概念,但我无法真正拥抱它并将它们放在我自己的应用程序中。但经过进一步调查,这个样本毕竟对我有帮助 - 所以我现在走在正确的轨道上。 将此标记为答案,因为提供的示例代码是导致解决方案的原因。谢谢!【参考方案2】:Bumbuska,
Prism 将是您实现此功能的好方法,一旦您了解了原理,就很容易做到。
我将这样做的方法是在主区域的启动事件中添加事件侦听器。当您在菜单中选择您的项目时,您会触发该事件。发生这种情况时,您的主要区域将处理该事件,并且您从主要区域清除当前视图。然后创建您要使用的新视图并添加它。
您的主要区域应如下所示:
public void Initialize()
Events.PageEvents.ClickedEvent1 ce1 = this.eventAggregator.GetEvent<Events.PageEvents.ClickedEvent1>();
ce1.Subscribe(LoadView, ThreadOption.UIThread, true);
private void LoadView(Events.HomePageEvents.Clicked clicked1)
IRegion mainRegion = RegionManager.Regions["MainRegion"];
foreach (object view in new List<object>mainRegion.Views))
RegionManager.Regions["MainRegion"].Remove(view);
IModule firstModule = Container.Resolve<Modules.FirstModule>();
firstModuleModules.Initialize();
我希望这能为您指明正确的方向。如果您需要更多信息,请告诉我。
【讨论】:
谢谢!这对我来说是很好的帮助。我让它像我现在想要的那样工作,但我没有使用事件聚合。我在菜单项上使用命令绑定,这些是一些 viewModel 对象,包含有关在主区域中打开哪个组件的信息。这对我来说似乎很好 - 但事件聚合是一种更优选的方式吗?感谢区域清除示例。我希望找到一个在视图中设置元素的功能,而不是清除所有现有元素并添加新元素。但是你的例子说明了典型的方法? 这真的取决于你的应用程序是否命令或事件更好。我认为主要的导航菜单命令可能会更好。您可以在您的主要区域中激活所有视图,然后激活您想要使用的视图。同样,这将取决于您的应用程序,但对我来说,我不会加载可能不会被使用的东西。 好的 - 对我来说,暂时没有这些事件似乎是合理的。也许我稍后会改变我的观点,但它现在有效。再次感谢您的帮助!以上是关于在 Wpf 应用程序中使用 Prism 进行导航的主要内容,如果未能解决你的问题,请参考以下文章
Prism/MVVM (MEF/WPF):从模块中公开导航 [例如菜单]