如何使用棱镜在Module中为多个视图导航

时间:2014-06-20 07:54:38

标签: c# wpf navigation prism

我是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));
  1. 在这种情况下,如何在视图之间导航并传递数据?
  2. 我需要在Module class Initialize function中指定什么?
  3. 此外,在模块类中,当我同时注册同一区域的视图时,我能够看到两个视图,所以我也需要激活和停用我的视图。

    提前致谢

2 个答案:

答案 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)

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

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