MVVMパターンを大いに助けてくれるPrismフレームワークですが、意外とまだ情報が少ないです。

今回は基本的なところで、画面遷移と画面遷移によるパラメーターの受け渡しをさらっとご紹介します。

パラメーターの受け渡しに関しては、調べてもなかなか出てこなかった記憶があります。

Prismによる画面遷移

今回は簡単に下記のようなクラス構成で行っていきます。

※だいぶ端折りましたが、Prismのテンプレート(Blank App)でプロジェクトを作成し、Prismのアイテムテンプレートで「PrismContentPage1」を作成しています。

上記の流れで作成した場合、上記クラス構成の時点で「App.xaml.cs」の中身は下記のようになっています。

この中で重要になるのが下記のコードです。

アプリ起動時にコンテナにページを登録しておくことで、ページ遷移の際にはそのコンテナからページが注入されているイメージです。

それでは実際の画面遷移を行うコードを見てみましょう。

下記のコードでページ遷移を実現することが出来ます。

INavigationServiceのNavigateAsyncメソッドで遷移先のページの名前を指定することで遷移が可能です。

ただ一点気を付けることが、厳密にはページの遷移ではなく、モーダルのページを生成している、ということです。

なのでPrismを利用してアプリを作成する際には、ページ遷移の数がパフォーマンスに影響してくる可能性があります。

ちなみに下記のように絶対パスからの指定を行うと、それまで生成してきたページを全て破棄して新たにルートからのページが生成されるようです。

文字列の指定でも可能ですが、保守容易なコードにしていく為にもルートパスは定数かリソースなどで指定しておき、ページ名もtypeof(ページクラス).Nameなどで指定するのがいいと思われます。

Prismで画面遷移によるパラメーターの受け渡し

画面間でパラメーターの受け渡しを行うには、遷移元のページは下記のように記述します。

NavigationParametersへの遷移パラメーターの追加は下記でも可能です。

遷移先のページでパラメーターを受け取るには、ViewModelBaseに実装されているINavigationAwareのメソッドを使います。

INavigationAwareインターフェースの挙動に関しては下記がとても参考になりました。

とくに各メソッドがどのタイミングで動くか、は描画に大きく影響してきます。

ちょっとだけ書いておくと、受け取ったパラメーターで例えばリストデータを引き当てる場合、描画にはObservableCollectionではなく、BindableなList型のプロパティを使う必要がある、などです。

意外とObservableCollectionも万能ではありませんね。

まとめ

まとめ
  1. Prismでの画面遷移はINavigationServiceのNavigateAsyncを使う。
  2. Prismでのパラメーター受け渡しはNavigateAsyncの第2引数にNavigationParametersを渡し、遷移先ではINavigationAwareのメソッドで受け取る。
  3. ObservableCollectionを信用しまくってるとハマる。

以上です。

スポンサーリンク