MVVMパターンを大いに助けてくれるPrismフレームワークですが、

意外とまだ情報が少ないです。

 

今回は基本的なところで、画面遷移と

画面遷移によるパラメーターの受け渡しをさらっとご紹介します。

 

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

Prismによる画面遷移

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

※だいぶ端折りましたが、Prismのテンプレート(Blank App)でプロジェクトを作成し、

Prismのアイテムテンプレートで「PrismContentPage1」を作成しています。

 

上記の流れで作成した場合、上記クラス構成の時点で

「App.xaml.cs」の中身は下記のようになっています。

 

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

 

アプリ起動時にコンテナにページを登録しておくことで、

ページ遷移の際にはそのコンテナからページが注入されているイメージです。

 

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

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

 

MainPageViewModel.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を信用しまくってるとハマる。

 

以上でした。