0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Prism コードサンプル学習:18-NavigationCallback

Posted at

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について見ていこうと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?