在Wpf应用程序中使用Prism进行导航

时间:2009-09-09 20:13:31

标签: wpf navigation prism

我正在Wpf开始一个新项目,现在正在考虑使用Prism。现在我只是尝试使用Prism设置应用程序的导航。不幸的是,我缺乏框架经验使得开始有点困难..

为了更准确地说明我的第一个挑战,我有一个带有“导航/菜单”区域和“主要”区域的应用程序。导航区域对于所有不同的主要区域视图都是相同的,因此我在shell.xaml中定义了菜单。单击任何菜单项时,我想使用Prism向该区域添加视图。第一;这是人们通常会使用棱镜吗?如果是这样;什么是典型的方法?我的意思是更具结构性......

我的印象是,Prism最终会使我的应用程序更具可伸缩性,我发现我从中获得了一些其他优势 - 比如IoC容器。所以我想用它 - 如果我只能完成第一步......

2 个答案:

答案 0 :(得分:4)

我有一个示例,它对使用菜单的模块以及如何向区域添加视图使用了更多的CAG感觉。它应该让事情变得更加清晰。

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

希望这有帮助, 安德森

答案 1 :(得分:3)

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

}

我希望指出你正确的方向。如果您需要更多信息,请与我们联系。