在视图WPF PRISM应用程序之间导航

时间:2013-02-11 20:20:30

标签: wpf prism

我正在开发一个具有以下结构的WPF PRISM应用程序(我已经简化了更好的解释,没有额外的层)。我使用Unity作为我的DI / IOC

  • AppMain - Bootstrapper
  • Gui - 观看和查看模型
  • 数据 - 使用EF的数据。

在Gui,我的观点名称如下:

  • 主页
  • EmployeesView
  • OrdersView
  • 报告

我在shell中有三个区域。 MainRegion - 主要内容 TopRegion - 导航菜单 BottomRegion - 状态栏

我使用以下方法向区域注册视图

IRegion region = _regionManger.Regions[RegionNames.MainRegion];
var mainView = _container.Resolve<Home>();
region.Add(mainView, ViewNames.HomeViewName);
region.Activate(mainView);

第一次激活发生在Top,Main和Bottom的模块初始化方法中。

在此之后,我会在单击按钮时激活其他视图。它现在只是代码背后的代码。示例代码:

 IRegion region = _regionManger.Regions[RegionNames.MainRegion];
 var reportView = region.GetView(ViewNames.ReportsViewName);
 if (reportView == null)
 {
    reportView = _container.Resolve<ReportsView>();
    region.Add(reportView, ViewNames.ReportsViewName);
    region.Activate(reportView);
 }
 else
 {
        region.RequestNavigate(ViewNames.ReportsViewName);
 }

问题1 :关于如何做到这一点或我正在做的事情的任何建议都很好。 顶部菜单包含Home,Employees,Orders,Reports按钮。

在主页中,我最近在datagrid中将员工的订单作为readonly。 我想双击导航到OrderView并传递所选订单以显示给用户。 问题2 我不知道在哪里进行导航。

问题3:另一个问题是如果设置RegionMemberLifeTime keepAlive为false,则不会触发INavigationAware方法。如果我没有将KeepAlive设置为false,则页面不会刷新,因为视图模型不会被调用。

我需要在导航到页面时刷新页面并且不会过时,并且当视图导航到用户时也会处理任何确认提示。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这肯定为时已晚......但

问题1/2:在模块初始化程序中向区域添加内容是否有特殊原因? 常见的方式更像是 - &gt;在xaml:

<ContentControl prism:RegionManager.RegionName="MainRegion" />

并在ModuleInit.cs中 - &gt;初始化()

_regionManager.RegisterViewWithRegion("MainRegion", () => _container.Resolve<MainView>());

问题3: 视图必须实现INavigationAware,IRegionMemberLifetime 和swich区域一样,在viewModel中你可以:

_regionManager.RequestNavigate("RegionWhatever", new Uri("TestView", UriKind.Relative));

但是要工作,你必须在ModulInit.cs中将它作为一个具有viewName的对象注册,如下所示:

_container.RegisterType<Object, TestView>("TestView");

和具有正确RegionName的contentControl当然在xaml中定义