WPF Prism 入門エントリまとめ

WPF Prism 入門 として 2017/12 月に episode: 0 を公開して、エントリの数も増えてきたのでまとめページを作成しました。

Windows デスクトップアプリは Windows Form しか作ったことがない管理人が、WPF と Prism を使って MVVM パターンでアプリを作成する過程で調べた情報を順番に書いているので、WPF と Prism を 1 から覚えたいと言う場合は、episode: 1 (古いエントリ)から順に読み進んでもらえると良いと思います。
episode: 5 からは ReactiveProperty も導入したので、ReactiveProperty 入門も兼ねた内容になっています

前提として以下のエントリは、 Visual Studio 2017 Community Edition で .NET Framework 4.7.2 以上 と C# + Prism 7.1 + ReactiveProperty + Extended WPF Toolkit™ を使用して 、WPF アプリケーションを MVVM パターンで作成するのが目的で、C# での基本的なコーディング知識を持っている人を対象にしています。

WPF Prism episode: 1 ~ WPF は MVVMフレームワークとともに。~

WPF Prism episode: 2 ~ WPF のフレームワーク決まってますか?迷ってますか? Prism を選択してもらっていいですか? ~

2018/9/30 公開。
episode: 1 公開から 1 年近く空いていますが、裏で WPF のアプリを作る為に色々調べ・試してみても分からないことが多過ぎて気持ちが挫けかけていた時に Prism の公式サンプルと出会い、道が開けてきたのをきっかけに Prism の紹介記事を書こうと思い立って書いたエントリ。

episode: 2 は Prism の公式サンプル紹介がメインです。

サブタイトルは『終末なにしてますか? 忙しいですか? 救ってもらっていいですか?』より。

WPF Prism episode: 3 ~ Re: ゼロから始める Prism 生活 ~

2018/10/19 公開。
Prism を覚えようとしてた時、全体を通して理解できるような情報は公式ドキュメント(英語)位しか見当たらなかったので、Prism 全体を通して記事にすればそれなりに需要がありそうな気がして、丁度裏で作っていたプロトタイプを題材にアプリを作成する手順で記事を書けば理解しやすいかもしれない!と思い込みのまま本格的に連載することを決意したエントリ。

このサイトでは 2019 年 3 月現在最多 PV を稼いでくれているページで、WPF Prism 入門の入口としての役割を果たしてくれています。

Prism のプロジェクト作成から始まり、Prism Shell の作成と最初の Prism Module を作成する手順までを紹介する間で、WPF の Grid パネルで画面のレイアウトを作成する方法等も併せて紹介しています

又、このエントリ公開直前に Prism 7.1 がリリースされ、管理人自身もかなり混乱しましたが、Prism 7.1 の変更箇所の大半がアプリ開始時に行うべき処理がほとんどだったため、サンプルアプリを作り直して、公開予定日をずらして Prism 7.1 の変更箇所についても内容に含めることが出来た思い出深いエントリです。

サブタイトルは『Re:ゼロから始める異世界生活』より。

WPF Prism episode: 4 ~ DI だけど Unity さえあれば関係ないよねっ ~

2018/11/4 公開。(2019/3/28 リニューアル)
Prism で作成するアプリケーションから表示する View は複数の独立した dll に分割されて作成される場合が多く、スタートアッププロジェクトからも参照されていない dll も存在するため、アセンブリ間でデータオブジェクトを受け渡す方法として DI コンテナの Unity が用意されていますが、管理人は DI コンテナをどのように使用すれば良いか全く分からなくてかなり苦労しました。
実際の DI コンテナは『コンストラクタのパラメータに追加するだけで後は勝手にやってくれるよ!』と言う知ってる人には当たり前!な内容を書いたエントリ。

サブタイトルは『お兄ちゃんだけど愛さえあれば関係ないよねっ』より。

WPF Prism episode: 4.5 ~ ReactiveProperty からはじまる MVVM 狂想曲 ~

2018/11/17 公開となっていますが実際の公開は 2019/4/18 です。
元々 episode: 5 として公開していた記事の一部を、加筆・修正箇して episode: 4.5 と、episode: 5 の 2 つに分割しました。

MVVM 入門ReactiveProperty 入門がメインの内容です。

サブタイトルは『デスマーチからはじまる異世界狂想曲』より。

WPF Prism episode: 5 ~ TreeView の MVVM には ReactiveProperty が埋まっている ~

2018/11/18 公開。(2019/4/18 リニューアル)
タイトルは TreeView となっていますが、ReactiveProperty 入門として TreeViewItem と ReactiveProperty をバインドする際の初期化について書いています。

又、List 系のコントロールで各項目ごとにバインドする VM を用意する考え方も併せて紹介しているので、内容的には MVVM パターンで画面を作成する場合に結構重要と思えることを書いているエントリ。
パック URI スキームについても簡単に紹介しています

サブタイトルは『櫻子さんの足下には死体が埋まっている』より。

WPF Prism extra: 1 ~ TreeViewItem を MVVM パターンで展開する ~

2018/12/8 公開。(実際の公開は 2019/5/6)
元々 episode: 6 の一部だった TreeViewItem の IsExpanded をバインドする方法を切り出して新たに extra のタイトルをつけて別記事へ分割しました。

WPF Prism episode: 6 ~されどイベントは ViewModel と踊る~

2018/12/9 公開。
タイトルからは内容が分かりにくいですが、コントロールの任意のイベントを VM へバインドして、ついでに EventArges パラメータまで一緒に受け取る方法を紹介しているエントリ。
ここでは TreeView.SelectedItemChanged イベントを VM へバインドする方法を紹介しています。

サブタイトルは『されど罪人は竜と踊る』より。

WPF Prism episode: 6.5 ~ いつだって Prism の画面遷移は RequestNavigation だった。 ~

2018/12/10 公開。(実際の公開は 2019/5/6)
元々 episode: 6 で公開していた内容を分割して新規エントリとしました。
Prism の RequestNavigate で View を動的に切り替える方法を紹介しています。

サブタイトルは『いつだって僕らの恋は10センチだった。』より。

WPF Prism extra: 2 ~ TreeViewItem を MVVM パターンで選択する ~

2018/12/15 公開。(実際の公開は 2019/6/5)
元々 episode: 7 の一部だった TreeViewItem を MVVM パターンで VM から選択する方法の紹介部分を extra シリーズとして分割。新規エントリとしました。
Loaded イベントを ReactiveCommand とバインドする方法等 Prism 入門からは離れてしまう内容を分離しました。

このエントリのメインは ReadOnly なのでバインドしても意味がない TreeView の SelectedItem を VM から設定する簡単な方法の紹介です

WPF Prism extra: 3 ~ とある TreeView の状況一覧 (Context menu) ~

2018/12/20 公開。(実際の公開は 2019/6/6)
元々 episode: 8 の一部だった TreeView にコンテキストメニューを追加する内容を extra シリーズとして分割。新規エントリとしました。
ReactiveCommand からコントロールの IsEnabled を設定する方法も併せて紹介しています。

extra シリーズのサブタイトルはパロディ風を取らない形で進めるつもりでしたが、extra: 3 のみ episode: 8 の大部分を分割して、episode: 8 自体はタイトルを変更したので episode: 8 で使用していたサブタイトルを流用することにしました。
サブタイトルは『とある魔術の禁書目録』より。

WPF Prism episode: 7 ~ 画面遷移のパラメータたちが INavigationAware から来るそうですよ? ~

2018/12/24 公開。(2019/6/7 に全面リニューアル)
Prism で画面遷移した場合に INavigationAware を経由してパラメータを渡す方法を紹介
INavigationAware インタフェースの全メンバ OnNavigatedTo、IsNavigationTarget、OnNavigatedFrom の使用法を紹介しています。
併せて、IRegionMemberLifetime インタフェースを使用して View を破棄する方法も紹介しています。

元々、episode: 7、8 で紹介していた内容を extra: 23episode: 78 の 4 エントリに再構成しました。

サブタイトルは『問題児たちが異世界から来るそうですよ?』より。

WPF Prism episode: 8 ~ ReactiveProperty がバインドできないのはどう考えても Navigation が悪い! ~

2019/1/27 公開。(2019/6/8 に全面リニューアル)

Prism で画面遷移して INavigationAware 経由で受け取ったパラメータを OnNavigatedTo イベントで ReactiveProperty にバインドした際、プロパティの値が View へ表示されない問題の対応を書いたエントリ。

又、ReactiveProperty を使用して VM ⇔ Model 間を双方向でバインドする方法も紹介しています。

サブタイトルは『私がモテないのはどう考えてもお前らが悪い!』より。

WPF Prism episode: 9 ~ ReactiveProperty の Validation は DataAnnotation じゃないと思った? ~

2019/2/24 公開。
長すぎタイトルシリーズ第 2 弾。初の 2 エントリ構成。
Prism 入門と言うより WPF の Validation を ReactiveProperty で定義したプロパティへ設定する内容がメインのエントリ。

サブタイトルは『ネトゲの嫁は女の子じゃないと思った?』より。

WPF Prism episode: 10 ~ ErrorTemplate は Resources タグ、時々、ResourceDictionary ファイルのなか。~

WPF Prism episode: 11 ~ Prism が画面遷移キャンセルするのは IConfirmNavigationRequest だけど INavigationAware じゃない ~

2019/3/10 公開。
Prism の Navigation(画面遷移)をキャンセルするための IConfirmNavigationRequest インタフェースを使用する方法を紹介

サブタイトルは『俺が好きなのは妹だけど妹じゃない』より。

WPF Prism episode: 12 ~ Prism メッセージボックスの Service な日常 ~

2019/3/24 公開。
Prism 組み込みのメッセージボックスを表示する方法の紹介と、メッセージボックス表示機能を Service として分離して他プロジェクトでも再利用できる方法を紹介しています。

サブタイトルは『妖怪アパートの幽雅な日常』より。

WPF Prism episode: 13 ~ カスタマイズしたらメッセージボックスだった件 ~

WPF Prism episode: 14 ~ ListBox 相手は ReactiveCollection、ダイアログな、Prism。 ~

WPF Prism episode: 15 ~ FolderBrowserDialog の為ならば、Prism の InteractionRequest はもしかしたらコモンダイアログも Popup できるかもしれない。 ~

2019/5/26 公開。
サブタイトル長過ぎシリーズ。WPF Prism 入門はこの episode: 15 で最終回になります。
Prism の InteractionRequest から『ファイルを開くダイアログ』、『ファイルに名前を付けて保存ダイアログ』等のコモンダイアログを表示する方法を紹介しています

併せて、ファイルを開くダイアログベースのフォルダ選択ダイアログを表示する方法も紹介しています

サブタイトルは『うちの娘の為ならば、俺はもしかしたら魔王も倒せるかもしれない。』より。