我是Prism的新手,所以需要一些关于视图之间导航的帮助 在我的项目中,我只有4个视图,所以我在一个模块中创建了所有视图。我创建了shell和bootstrapper。我需要做的是,我需要将一些数据从一个视图传递到另一个视图(例如,第一个视图有员工列表,我选择一个员工,我将单击按钮以获取该员工的详细信息)。目前我正在使用ViewModel第一种方法
_container.RegisterType<DashboardView>();
_container.RegisterType<PrepareRunView>();
_container.RegisterType<IDashboardViewViewModel, DashboardViewViewModel>();
_container.RegisterType<IPrepareRunViewViewModel, PrepareRunViewViewModel>();
_regionManager.RegisterViewWithRegion(RegionNames.MainRegion, typeof(DashboardView));
_regionManager.RegisterViewWithRegion(RegionNames.MainRegion, typeof(PrepareRunView));
此外,在模块类中,当我同时注册同一区域的视图时,我能够看到两个视图,所以我也需要激活和停用我的视图。
提前致谢
答案 0 :(得分:1)
第一个视图(您选择员工的视图)的视图模型需要引用Prism的IRegionManager对象。您导航到第二个视图并按如下方式传递一些数据,就像URL中的查询字符串值一样: -
var uriQuery = new UriQuery();
uriQuery.Add("empid", "123");
// Add more name/value pairs if you wish!
var viewName = "your_view_name" + uriQuery;
_regionManager.RequestNavigate("your region name", viewName);
如您所见,您可以通过指定视图名称导航到视图。为此,您需要使用IoC容器在名称下注册视图(如何执行此操作取决于您使用的容器)。
在导航到的视图的视图模型中,实现INavigationAware接口: -
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
// This will be called whenever the view is navigated to.
// Extract the querystring value(s).
var employeeId = navigationContext.Parameters["empid"];
.. etc..
}
答案 1 :(得分:0)
您可以使用事件聚合器进行通信