您的位置:首页 > 其它

Prism中,页面跳转以及页面之间传递参数(NavigationParameters)

2017-12-05 10:35 931 查看

一、页面跳转概述

在Prism中,使用Navigation来进行页面之间的跳转通常需要一下几步:

1. 创建新页面,并且实现INavigationAware接口

2. 使用IRegionManager注册页面

3. 使用NavigationParameters封装页面跳转的参数

4. 使用IRegionManager.RequestNavigate()跳转到目标页面

二、例子

创建新页面,并且实现INavigationAware接口

public partial class ContactMainWindowView : UserControl, INavigationAware
{
public ContactMainWindowView()
{
InitializeComponent();

}

#region  INavigationAware

public void OnNavigatedTo(NavigationContext navigationContext)
{
}

public bool IsNavigationTarget(NavigationContext navigationContext)
{
var param = navigationContext.Parameters["Param"] ;
Console.WriteLine(param?.ToString());
return true;
}

public void OnNavigatedFrom(NavigationContext navigationContext)
{

}

#endregion

}


使用IRegionManager注册页面

ServiceLocator.Current.GetInstance<IRegionManager>()
.Regions[RegionNames.ContentRegion].Add(new ContactMainWindowView());


用NavigationParameters封装参数:

方法一:该方法参数类型可以为object

var para = new NavigationParameters();
para.Add("Uri", "ContactMainWindowView");//此处建议将ContactMainWindowView定义为常量
para.Add("Param", "hello saylor");//key必须为字符串,value可以传递object类型,此处用"hello saylor"


方法二:该方法参数类型可以为string

var para = new NavigationParameters("Uri=ContactMainWindowView&Param=hello saylor");


使用IRegionManager.RequestNavigate()跳转到目标页面

ServiceLocator.Current.GetInstance<IRegionManager>()
.RequestNavigate(RegionNames.ContentRegion, para["Uri"].ToString(), para);


三、总结

使用IRegionManager注册页面时,是new一个新页面(不要多次注册)。并且对应的region会默认显示第一个注册的View。

使用了ServiceLocator来获取IRegionManager的实例。prism中,默认创建了实例,并进行了注册(依赖注入)。

用NavigationParameters封装参数,方法二中,构造函数的参数类似于get请求中的参数形式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  wpf prism