我正在开发一个具有以下结构的 WPF PRISM 应用程序(我已经简化以更好地解释而无需额外的层)。我使用 Unity 作为我的 DI/IOC
- AppMain - 引导程序
- Gui - 视图和视图模型
- 数据 - 使用 EF 的数据。
在 Gui 中,我的视图名称如下:
- 家
- 员工视图
- 订单查看
- 报告
我在外壳中有三个区域。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 的 Module Initialize 方法中。
在此之后,我在单击按钮时激活其他视图。现在只是后面的代码。示例代码在这里:
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 并将所选订单传递给用户。问题2我不确定在哪里进行导航。
问题3:另一个问题是如果将 RegionMemberLifeTime keepAlive 设置为 false,INavigationAware 方法不会触发。如果我没有将 KeepAlive 设置为 false,则不会刷新页面,因为不会调用视图模型。
我需要在导航到页面时刷新页面并且不会过时,并且还需要在视图导航离开时向用户处理任何确认提示。
非常感激你的帮助。