Prism コードサンプル学習:18-NavigationCallback
はじめに
以下の記事の続きです。
https://qiita.com/mngreen/items/1ed016e9dff06ae374b6
18-NavigationCallback
本サンプルは、前回記事に引き続き、RegionManager.RequestNavigateメソッドを用いてコントロールを切り替える例です。
ただし、ひとつ違う点として、コントロール切り替え後にメッセージボックスを表示するという振る舞いが追加されています。
具体的には、NavigationCompleteメソッドがRegionManager.RegionNavigateメソッド呼び出し時に引数として渡されています。
using System;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
namespace BasicRegionNavigation.ViewModels
{
public class MainWindowViewModel : BindableBase
{
private readonly IRegionManager _regionManager;
private string _title = "Prism Unity Application";
public string Title
{
get { return _title; }
set { SetProperty(ref _title, value); }
}
public DelegateCommand<string> NavigateCommand { get; private set; }
public MainWindowViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
NavigateCommand = new DelegateCommand<string>(Navigate);
}
private void Navigate(string navigatePath)
{
if (navigatePath != null)
_regionManager.RequestNavigate("ContentRegion", navigatePath, NavigationComplete);
}
private void NavigationComplete(NavigationResult result)
{
System.Windows.MessageBox.Show(String.Format("Navigation to {0} complete. ", result.Context.Uri));
}
}
}
前回記事でナビゲーションに至るまでのパスを追いましたが、今回も大きく変わりません。
呼び出し口がRequestNavigateメソッドに変わっただけで、以降の処理は同様です。巡り巡ってRegionクラスのRequestNavigateメソッドが呼び出され、RegionNavigationServiceクラスに委譲。
NavigationServiceクラスを読み出し元を順に辿っていくと、RequestCanNavigateFromOnCurrentlyActiveViewメソッドにたどり着き、140行目を満たさない場合のみ(ここの意図は依然わかっていない。)、ExecuteNavigationメソッドを実行します。 この中でコールバックアクションが実行されています。
おわりに
今回は、RegionManager.RequestNavigateメソッドの引数に追加したアクションが、どのタイミングで呼び出されるのかを確認しました。
ただ、大きな流れ(クラス間の関連やメソッド呼び出し)はあまり大きく変わっていませんでした。
次回、19-NavigationParticipationについて見ていこうと思います。