如何在模块中使用棱镜导航多个视图

本文关键字:导航 棱镜 视图 模块 | 更新日期: 2023-09-27 18:09:43

我是Prism的新手,所以需要一些视图之间导航的帮助在我的项目中,我只有4个视图,所以我在一个模块中创建了所有视图。我已经创建了shell和bootstrapper。我需要做的是,我需要将一些数据从一个视图传递到另一个视图(例如,第一个视图有员工列表,我选择一个员工,然后单击Button以获取该员工的详细信息)。目前我正在使用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));
  1. 在这种情况下,我如何做视图之间的导航和传递数据?
  2. 我需要在模块类初始化函数中指定什么?

此外,在模块类中,当我为同一区域注册两个视图时,我能够看到两个视图,所以我也需要激活和停用我的视图。

Thanks in advance

如何在模块中使用棱镜导航多个视图

第一个视图(选择员工的视图)的视图模型需要一个对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容器中(如何做到这一点取决于您使用的容器)。

在你要导航到的视图的视图模型中,实现inavationaware接口:-

    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..
    }

您可以使用事件聚合器进行通信

http://msdn.microsoft.com/en-us/library/ff921122.aspx