はじめに
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メソッドを実行している場合のシーケンス図です。
インターフェースの実装クラスのコンストラクタはOnNavigatedToメソッドの前に実行されるようです。
画面の遷移先がないと遷移できないので、当たり前と言えば当たり前ですが、コードを見て改めて理解できました。
因みにPrismのINavigationAwareで定義されているメソッドは、全てprivateメソッドPrism.Regions.RegionNavigationService.ExecuteNavigation
の処理中にActionにより実行されています。