1. 程式人生 > >Prism中,頁面跳轉以及頁面之間傳遞引數(NavigationParameters)

Prism中,頁面跳轉以及頁面之間傳遞引數(NavigationParameters)

一、頁面跳轉概述

在Prism中,使用Navigation來進行頁面之間的跳轉通常需要一下幾步:
1. 建立新頁面,並且實現INavigationAware介面
2. 使用IRegionManager註冊頁面
3. 使用NavigationParameters封裝頁面跳轉的引數
4. 使用IRegionManager.RequestNavigate()跳轉到目標頁面

二、例子

  1. 建立新頁面,並且實現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 }
  1. 使用IRegionManager註冊頁面

ServiceLocator.Current
.GetInstance<IRegionManager>() .Regions[RegionNames.ContentRegion].Add(new ContactMainWindowView());
  1. 用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");
  1. 使用IRegionManager.RequestNavigate()跳轉到目標頁面
ServiceLocator.Current.GetInstance<IRegionManager>()
.RequestNavigate(RegionNames.ContentRegion, para["Uri"].ToString(), para);

三、總結

  1. 使用IRegionManager註冊頁面時,是new一個新頁面(不要多次註冊)。並且對應的region會預設顯示第一個註冊的View。
  2. 使用了ServiceLocator來獲取IRegionManager的例項。prism中,預設建立了例項,並進行了註冊(依賴注入)。
  3. 用NavigationParameters封裝引數,方法二中,建構函式的引數類似於get請求中的引數形式。