0
0

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 コードサンプル学習:20-NavigationExistingViews

Posted at

Prism コードサンプル学習:20-NavigationExistingViews

はじめに

以下の記事の続きです。
https://qiita.com/mngreen/items/cf6f758d04a0b6fa00f2

20-NavigationExistingViews

本サンプルは、前回記事と同じくボタンを押下するとタブコントロールにタブアイテムが追加されるサンプルです。
ボタンを押下するごとにタブのビューのカウントがインクリメントされます。
ただし、設定した回数(サンプルの場合は4回目)を超えると新しいタブが生成されます(正確には、そのVMと紐づくVがジャンプする対象とならない)。
以下のINavigationAware.IsNavigationTargetメソッドがtrueを返すかfalseを返すかで、タブが新しく生成されるかが変わります。

using Prism.Mvvm;
using Prism.Regions;
namespace ModuleA.ViewModels
{
    public class ViewAViewModel : BindableBase, INavigationAware
    {
        private string _title = "ViewA";
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }

        private int _pageViews;
        public int PageViews
        {
            get { return _pageViews; }
            set { SetProperty(ref _pageViews, value); }
        }

        public ViewAViewModel()
        {
        }

        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            PageViews++;
        }

        public bool IsNavigationTarget(NavigationContext navigationContext)
        {
            return PageViews / 3 != 1;
        }

        public void OnNavigatedFrom(NavigationContext navigationContext)
        {
        }
    }
}

今回のサンプルの変化点としては、VMでINavigationAwareインターフェイスを実現しており、IsNavigationTargetメソッド内の処理を変更している点です。
入口はこれまでに見たものと同じでRegionNavigationService.ExecuteNavigationメソッドから通ります。
この中のRegionNavigationContentLoader.LoadContentメソッドで、IsNavigationTargetメソッドでtrueが返らない場合、遷移先のViewが存在しないことになり、新たにViewを作成する処理に遷移することが分かります。
その結果として、モジュールのViewのインスタンスがどんどんと新たにできることが分かります。

おわりに

今回は、RegionManager.IsNavigationTargetメソッドの処理を変更することで、タブアイテムが増えていくサンプルを見ていきました。
前回と同じく、大きな流れ(クラス間の関連やメソッド呼び出し)はあまり大きく変わってはいませんでしたが、なぜViewが増えていくのかその中身に触れられました。
次回、21-PassingParametersについて見ていこうと思います。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?