2013-02-11 83 views
2

我正在研究一个WPF PRISM应用程序,它具有以下结构(我已简化以更好地解释而无需额外的图层)。我使用Unity作为我的DI/IOC在视图之间导航WPF PRISM应用程序

  • AppMain - 引导程序
  • 桂 - 视图和视图模型
  • 数据 - 使用EF。

在桂,我有如下看法名称:

  • 首页
  • EmployeesView
  • OrdersView
  • 报告

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

我使用下面的方法来注册视图

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

第一激活发生在模块初始化方法顶部区域,主要和底部。

之后,我点击按钮时激活其他视图。这只是现在的代码。示例代码在这里:

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:如何可以做到这一点还是我做的方式是罚款的任何建议。 顶部菜单包含主页,员工,订单,报告按钮。

在主页中,我最近将员工在datagrid中的订单视为只读订单。 我想双击导航到OrderView并将选定的订单传递给用户。 PROBLEM2我不确定在哪里做导航。

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

我需要页面刷新时,它是导航到,而不是陈旧,并处理任何确认提示给用户时,视图导航离开它。

非常感谢您的帮助。

+0

我上面关于regionamemberlifetime的评论是错误的。我认为我的视图名称拼写错误。我也看了棱镜快速启动和PRISM的样品。导航是在视图模型中完成的。一旦我明白了,我会纠正我的发帖和解决方案。谢谢 – isakavis 2013-02-12 16:18:46

回答

1

它肯定是来不及了,但...

问题1/2:有没有你为什么在模块初始化内容添加到区域特别的理由? 的常见的方式更像是 - >在XAML:

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

和ModuleInit。CS - >初始化()

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

问题3: 认为必须实现INavigationAware,IRegionMemberLifetime 和SWICH区域,在视图模型,你做的事:

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

但要工作,你必须在ModulInit.cs其注册为与的viewName的对象,这样的:

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

并用正确的RegionName一个ContentControl中定义I n当然是xaml