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