2009-09-09 62 views
4

我在Wpf中开始一个新项目,现在正在研究使用Prism。现在我只是试图使用Prism来设置应用程序的导航。不幸的是我缺乏与框架的经验使得它有点难以上手..使用Prism在Wpf应用程序中导航

更精确地了解我的第一个挑战,我有一个“导航/菜单”区和“主”区域的应用程序。导航区域对于所有不同的主要区域视图都是相同的,因此我在shell.xaml中定义菜单。点击任何菜单项时,我想使用Prism将视图添加到该区域。第一;这是一个典型的使用棱镜的东西吗?如果是这样;典型的方法是什么?我的意思是在更多的结构层面上。

我的印象是,Prism将使我的应用程序的可扩展性最终得到提升,并且我看到我从中获得了其他一些优势 - 比如IoC容器。所以,我想用它 - 如果我只能通过第一步骤得到..

回答

4

我已经得到了使用多一点的CAG的感觉模块有助于菜单以及如何添加视图区域的样本。它应该让事情更清楚一点。

http://dl.getdropbox.com/u/376992/CAGMenus.zip

希望这有助于 安德森

+0

Thx。我已经有了这个样本。我了解了这些概念,但我无法真正理解它并将它们放在我自己的应用程序中。但经过一些进一步的调查,这个样本真的帮助了我 - 所以我现在走在了正确的轨道上。 – stiank81 2009-09-10 08:48:55

+0

很高兴我能帮到你。 – 2009-09-10 16:52:55

+0

将此标记为答案,因为提供的示例代码是导致解决方案的原因。谢谢! – stiank81 2009-09-10 19:47:36

3

Bumbuska,

棱镜将是一个伟大的方式为你实现这个功能,这是很容易做到,一旦你了解校长。

我会做的方式是在你的主区的启动事件添加事件侦听器。当您在菜单中选择您的项目时,您将触发该事件。发生这种情况时,您的主区域将处理该事件,并清除主区域中的当前视图。然后创建您想要使用的新视图并添加它。

你的主要区域应该是这个样子:

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(); 

} 

我希望点,你在正确的方向。如果您需要更多信息,请告诉我。

+0

THX!这对我很有帮助。我现在就像我想要的那样工作,但我没有使用事件聚合。我在菜单项上使用了命令绑定,这是一些viewModel对象,它包含关于在主区域中打开哪个组件的信息。这对我来说似乎很好 - 但事件聚合是一种更受欢迎的方式吗? Thx为区域清算示例。我希望找到一个在视图中设置元素的函数,而不是清除所有的exise并添加新的元素。但你的例子说明了典型的方法? – stiank81 2009-09-10 08:52:40

+1

这实际上取决于你的应用程序是否命令或事件更好。我认为主导航菜单命令可能会更好。 您可以在您的主要区域中激活所有视图,并激活您想要使用的视图。再次,这将取决于您的应用程序,但对我来说,我不会加载可能无法使用的东西。 – 2009-09-10 15:07:01

+0

好的 - 对我来说,现在看来没有事件似乎是合理的。也许稍后我会改变我的看法,但现在它仍然有效。 Thx再次为您提供帮助! – stiank81 2009-09-10 19:46:54