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 1 year has passed since last update.

Prism コードサンプル学習:23-RegionMemberLifetime

Posted at

Prism コードサンプル学習:23-RegionMemberLifetime

はじめに

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

23-RegionMemberLifetime

本サンプルは、ボタンを押下することでViewA, ViewBを生成できるサンプルになっており、ViewAはひとつだけ生存するように、ViewBはいくつでも生成できるようになっています。
ViewAではIRegionMemberLifetimeインターフェイスを実現しているところがポイントです。
IRegionMemberLifetimeインターフェイスは、KeepAliveプロパティのみを持っています。

...

namespace ModuleA.ViewModels
{
    public class ViewAViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
    {
        ...

        public bool KeepAlive
        {
            get
            {
                return false;
            }
        }

        ...
    }
}

今回のサンプルでは、このKeepAliveプロパティがどのように使われているか分からないため、その部分を読み進めようと思います。
利用箇所を探すとRegionMemberLifetimeBehaviorクラスで利用されていました。
ShouldKeepAliveメソッド内でViewまたはViewModelにIRegionMemberLifetimeインターフェイスが実現されているか確認し、もし実現されていればその値を返すようになっています。
もし、未実現の場合は必ずtrueが返ります。
上記メソッドはOnActiveViewsChangedイベントハンドラ、つまりアクティブなビューが切り替わるたびに呼び出されます。非アクティブなビューをすべて走査し、不要であれば削除してしまいます。

ちなみに、RegionMemberLifetimeBehaviorはPrismInitializationExtensionsクラスで初期化時に登録されています。
この登録されたBehaviorはRegionAdapterBaseクラスでアタッチされます。RegionAdapterBaseクラスは各種コントロールのベースクラスになるため、大体のコントロールはこの仕組みを利用できるはずです。

おわりに

今回は、IRegionMemberLifetimeインターフェイスを実現し、ビューの生存区間を制御するサンプルを見ていきました。
ビューの生存区間を適切に管理することができれば、軽快に動作するアプリが作れそうです。
次回、24-NavigationJournalについて見ていこうと思います。

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?