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

4
我正在开始一个Wpf新项目,现在正在考虑使用Prism。目前我只是想使用Prism来设置应用程序的导航。不幸的是,我对这个框架缺乏经验,所以有点难以入手。
更具体地说,我的第一个挑战是:我有一个“导航/菜单”区域和一个“主”区域的应用程序。导航区域将对所有不同的主区域视图保持一致,因此我在shell.xaml中定义了菜单。当单击任何菜单项时,我希望使用Prism将视图添加到该区域。首先,这通常是使用Prism完成的吗?如果是,典型的方法是什么?我指的是更结构化的层面。
我的印象是,Prism最终会使我的应用程序更具可扩展性,并且我看到它还有其他优点-例如IoC容器。因此,我想使用它-如果我只能通过第一步...
2个回答

4

谢谢。我已经有这个示例了。我理解了概念,但是我不能真正掌握并将其整合到自己的应用程序中。但通过进一步的调查,这个示例确实帮助了我 - 所以我现在在正确的轨道上。 - stiank81
将此标记为答案,因为提供的示例代码是解决方案的关键。谢谢! - stiank81

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

}

我希望这能为您指明正确的方向。如果您需要更多信息,请告知我。

谢谢!这对我很有帮助。现在我已经按照自己的想法让它工作了,但我没有使用事件聚合。我正在使用菜单项上的命令绑定,这些viewModel对象保存有关要在主区域中打开哪个组件的信息。这对我来说似乎很好 - 但是事件聚合是更受欢迎的方式吗?感谢您提供区域清除示例。我希望找到一个设置视图中元素而不是清除所有现有元素并添加新元素的函数。但是您的示例说明了典型的方法? - stiank81
1
这真的取决于你的应用程序,无论是命令还是事件更好。我认为对于主导航菜单,命令可能会更好。您可以在主区域中激活所有视图,并只激活要使用的视图。同样,这将取决于您的应用程序,但对我来说,我不会加载可能不会使用的内容。 - Cornelius Kruger
好的 - 对我来说,现在没有事件似乎是合理的。也许以后我会改变我的想法,但现在它可以工作。再次感谢你的帮助! - stiank81

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接