LoginSignup
5
5

More than 3 years have passed since last update.

PrismのINavigationAwareで定義されているメソッドと実装クラスのコンストラクタの実行順を確認してみた

Last updated at Posted at 2019-06-19

はじめに

PrismのPrism.Regions.INavigationAwareで定義されているメソッドとインターフェースの実装クラスのコンストラクタの実行順が気になったので、Prism - GitHubのコードを追って確認してみました。

ResionやNavigationについては、MVVM フレームワーク Prism の全体概観 - Qiita等を参考にしてください。
Prismに関してまだまだ初心者ですので、間違いなどあればご指摘ください。

PrismのINavigationAwareで定義されているメソッドとは

PrismのRegionでは、画面を管理して画面遷移を行うことができ、一度表示した画面を再び表示することができます。
この時、画面が遷移した時に初期化等を行う必要があります。
Prismでは、インターフェースPrism.Regions.INavigationAwareを提供しており、このインターフェイスを継承しておくことで、簡単に画面遷移時のタイミングで特定の処理を実行するようにできます。
インターフェースPrism.Regions.INavigationAwareで定義されているメソッドは以下になります。

bool IsNavigationTarget(NavigationContext)
引数で渡されたコンテキストのターゲットとなる画面かどうかを返します。
void OnNavigatedFrom(NavigationContext)
画面から離れるときに呼び出されます。
void OnNavigatedTo(NavigationContext)
画面に遷移してきたときに呼び出されます。

こちらより引用。

結論

Prism - GitHubでコードを追いながらざっくりとシーケンス図に起こしてみました。
これは、MainWindowからSubViewへの画面遷移を想定しており、MainWindowViewModelでRequestNavigateメソッドを実行している場合のシーケンス図です。

prism-sequence.png

インターフェースの実装クラスのコンストラクタはOnNavigatedToメソッドの前に実行されるようです。
画面の遷移先がないと遷移できないので、当たり前と言えば当たり前ですが、コードを見て改めて理解できました。

因みにPrismのINavigationAwareで定義されているメソッドは、全てprivateメソッドPrism.Regions.RegionNavigationService.ExecuteNavigationの処理中にActionにより実行されています。

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