Prism中,頁面跳轉以及頁面之間傳遞引數(NavigationParameters)
阿新 • • 發佈:2019-02-19
一、頁面跳轉概述
在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請求中的引數形式。