WPF Prism 入門 として 2017/12 月に episode: 0 を公開して、エントリの数も増えてきたのでまとめページを作成しました。
Windows デスクトップアプリは Windows Form しか作ったことがない管理人が、WPF と Prism を使って MVVM パターンでアプリを作成する過程で調べた情報を順番に書いているので、WPF と Prism を 1 から覚えたいと言う場合は、episode: 1 (古いエントリ)から順に読み進んでもらえると良いと思います。
episode: 5 からは ReactiveProperty も導入したので、ReactiveProperty 入門も兼ねた内容になっています。
WPF Prism 入門は WPF も MVVM も覚え始めの管理人がとりあえず試した事を記事にした読み物的な連載だったので、本来 1 つのエントリに書くべき情報があちこちに分散してしまった連載でした。新たに連載をスタートした .NET Core WPF Prism MVVM 入門 2020 シリーズは WPF Prism 入門の反省を踏まえ内容を再構成するための連載にしています。以前は .NET Core WPF Prism MVVM 入門 2020 シリーズのリンクもこのページで紹介していましたが、『.NET Core WPF Prism MVVM 入門 2020 エントリまとめ』として別ページに分割しました。
WPF のコントロールに適用できる UI フレームワーク等を紹介する WPF UI Gallery シリーズへのリンクもこのページで紹介していましたが、『WPF UI Gallery エントリまとめ』として別ページに分割しました。
以下のエントリは前提として、 Visual Studio 2019 Community Edition で .NET Framework 4.7.2 以上(連載後半は .NET Core を使用しています)と C# + Prism 7.1 + ReactiveProperty を使用して 、WPF アプリケーションを MVVM パターンで作成するのが目的で、C# での基本的なコーディング知識を持っている人を対象にしています。
episode: 1 WPF は MVVMフレームワークとともに。
2017/12/17 公開。
この頃に調べて出てきた WPF MVVM フレームワークである Livet、MVVM light toolkit、Prism の 3 つについて調べて感じたことを書いた読み物的なエントリ。
サブタイトルは『異世界はスマートフォンとともに。』より。
episode: 2 WPF のフレームワーク決まってますか?迷ってますか? Prism を選択してもらっていいですか?
2018/9/30 公開。
episode: 1 公開から 1 年近く空いていますが、裏で WPF のアプリを作る為に色々調べ・試してみても分からないことが多過ぎて気持ちが挫けかけていた時に Prism の公式サンプルと出会い、道が開けてきたのをきっかけに Prism の紹介記事を書こうと思い立って書いたエントリ。
episode: 2 は 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 の変更箇所についても内容に含めることが出来た思い出深いエントリです。
対象 Prism Ver. Prism 6.3、7.1、7.2サブタイトルは『Re:ゼロから始める異世界生活』より。
episode: 4 DI だけど Unity さえあれば関係ないよねっ
2018/11/4 公開。(2019/3/28 リニューアル)
Prism で作成するアプリケーションから表示する View は複数の独立した dll に分割されて作成される場合が多く、スタートアッププロジェクトからも参照されていない dll も存在するため、アセンブリ間でデータオブジェクトを受け渡す方法として DI コンテナの Unity が用意されていますが、管理人は DI コンテナをどのように使用すれば良いか全く分からなくてかなり苦労しました。
実際の DI コンテナは『コンストラクタのパラメータに追加するだけで後は勝手にやってくれるよ!』と言う知ってる人には当たり前!な内容を書いたエントリ。
サブタイトルは『お兄ちゃんだけど愛さえあれば関係ないよねっ』より。
episode: 4.5 ReactiveProperty からはじまる MVVM 狂想曲
2018/11/17 公開となっていますが実際の公開は 2019/4/18 です。
元々 episode: 5 として公開していた記事の一部を、加筆・修正箇して episode: 4.5 と、episode: 5 の 2 つに分割しました。
MVVM 入門と ReactiveProperty 入門がメインの内容です。
サブタイトルは『デスマーチからはじまる異世界狂想曲』より。
episode: 5 TreeView の MVVM には ReactiveProperty が埋まっている
2018/11/18 公開。(2019/4/18 リニューアル)
タイトルは TreeView となっていますが、ReactiveProperty 入門として TreeViewItem と ReactiveProperty をバインドする際の初期化について書いています。
又、List 系のコントロールで各項目ごとにバインドする VM を用意する考え方も併せて紹介しているので、内容的には MVVM パターンで画面を作成する場合に結構重要と思えることを書いているエントリ。
パック URI スキームについても簡単に紹介しています。
サブタイトルは『櫻子さんの足下には死体が埋まっている』より。
extra: 1 TreeViewItem を MVVM パターンで展開する
2018/12/8 公開。(実際の公開は 2019/5/6)
元々 episode: 6 の一部だった TreeViewItem の IsExpanded をバインドする方法を切り出して新たに extra のタイトルをつけて別記事へ分割しました。
episode: 6 されどイベントは ViewModel と踊る
2018/12/9 公開。
タイトルからは内容が分かりにくいですが、コントロールの任意のイベントを VM へバインドして、ついでに EventArges パラメータまで一緒に受け取る方法を紹介しているエントリ。
ここでは TreeView.SelectedItemChanged イベントを VM へバインドする方法を紹介しています。
サブタイトルは『されど罪人は竜と踊る』より。
episode: 6.5 いつだって Prism の画面遷移は RequestNavigation だった。
2018/12/10 公開。(実際の公開は 2019/5/6)
元々 episode: 6 で公開していた内容を分割して新規エントリとしました。
Prism の RequestNavigate で View を動的に切り替える方法を紹介しています。
サブタイトルは『いつだって僕らの恋は10センチだった。』より。
extra: 2 TreeViewItem を MVVM パターンで選択する
2018/12/15 公開。(実際の公開は 2019/6/5)
元々 episode: 7 の一部だった TreeViewItem を MVVM パターンで VM から選択する方法の紹介部分を extra シリーズとして分割。新規エントリとしました。
Loaded イベントを ReactiveCommand とバインドする方法等 Prism 入門からは離れてしまう内容を分離しました。
このエントリのメインは ReadOnly なのでバインドしても意味がない TreeView の SelectedItem を VM から設定する簡単な方法の紹介です。
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 で使用していたサブタイトルを流用することにしました。
サブタイトルは『とある魔術の禁書目録』より。
episode: 7 画面遷移のパラメータたちが INavigationAware から来るそうですよ?
2018/12/24 公開。(2019/6/7 に全面リニューアル)
Prism で画面遷移した場合に INavigationAware を経由してパラメータを渡す方法を紹介。
INavigationAware インタフェースの全メンバ OnNavigatedTo、IsNavigationTarget、OnNavigatedFrom の使用法を紹介しています。
併せて、IRegionMemberLifetime インタフェースを使用して View を破棄する方法も紹介しています。
元々、episode: 7、8 で紹介していた内容を extra: 2、3、episode: 7、8 の 4 エントリに再構成しました。
対象 Prism Ver. Prism 6.3、7.1、7.2サブタイトルは『問題児たちが異世界から来るそうですよ?』より。
episode: 8 ReactiveProperty がバインドできないのはどう考えても Navigation が悪い!
2019/1/27 公開。(2019/6/8 に全面リニューアル)
Prism で画面遷移して INavigationAware 経由で受け取ったパラメータを OnNavigatedTo イベントで ReactiveProperty にバインドした際、プロパティの値が View へ表示されない問題の対応を書いたエントリ。
又、ReactiveProperty を使用して VM ⇔ Model 間を双方向でバインドする方法も紹介しています。
対象 Prism Ver. Prism 6.3、7.1、7.2サブタイトルは『私がモテないのはどう考えてもお前らが悪い!』より。
episode: 9 ReactiveProperty の Validation は DataAnnotation じゃないと思った?
2019/2/24 公開。(2019/7/24 に全面リニューアル)
長すぎタイトルシリーズ第 2 弾。
Prism 入門と言うより WPF の Validation を ReactiveProperty で定義したプロパティへ設定する内容がメインのエントリ。
サブタイトルは『ネトゲの嫁は女の子じゃないと思った?』より。
episode: 10 ErrorTemplate は Resources タグ、時々、ResourceDictionary ファイルのなか。
2019/3/3 公開。
前回から引き続き、Validation ネタ。Validation の ErrorTemplate を設定する方法と、応用編として ErrorTemplate を ResourceDictionary ファイルへ外出しして共有する方法を紹介したエントリ。
サブタイトルは『同居人はひざ、時々、頭のうえ。』より。
extra: 4 Extended WPF Toolkit™ で数値と日付を入力
2019/7/24 公開。
リニューアル前の episode: 9 の一部だった Extended WPF Toolkit™ の紹介を extra シリーズとして新規エントリへ分割しました。
Extended WPF Toolkit™ の紹介以外にも、数値型をバインドした TextBox で小数点が入力できない現象も紹介しています。
episode: 11 Prism が画面遷移キャンセルするのは IConfirmNavigationRequest だけど INavigationAware じゃない
2019/3/10 公開。
Prism の Navigation(画面遷移)をキャンセルするための IConfirmNavigationRequest インタフェースを使用する方法を紹介。
サブタイトルは『俺が好きなのは妹だけど妹じゃない』より。
episode: 12 Prism メッセージボックスの Service な日常
2019/3/24 公開。
Prism 組み込みのメッセージボックスを表示する方法の紹介と、メッセージボックス表示機能を Service として分離して他プロジェクトでも再利用できる方法を紹介しています。
episode: 12 で紹介している INotification や PopupWindowAction 等は Prism 7.2 以降で Obsolute に指定されたので、Prism からメッセージボックスを表示したい場合は episode: 16 を見てください。
対象 Prism Ver. Prism 6.3、7.1サブタイトルは『妖怪アパートの幽雅な日常』より。
episode: 13 カスタマイズしたらメッセージボックスだった件
2019/4/14 公開。
Prism 組み込みのメッセージボックスをカスタマイズする方法を紹介しています。
episode: 13 で紹介している INotification や PopupWindowAction 等は Prism 7.2 以降で Obsolute に指定されたので、Prism からメッセージボックスを表示したい場合は episode: 16 を見てください。
対象 Prism Ver. Prism 6.3、7.1サブタイトルは『転生したらスライムだった件』より。
episode: 14 ListBox 相手は ReactiveCollection、ダイアログな、Prism。
2019/5/5 公開。
Prism からダイアログウィンドウを表示する方法を紹介しています。
episode: 14 で紹介している INotification や PopupWindowAction 等は Prism 7.2 以降で Obsolute に指定されたので、Prism からメッセージボックスを表示したい場合は episode: 16 を見てください。
対象 Prism Ver. Prism 6.3、7.1サブタイトルは『お見合い相手は教え子、強気な、問題児。』より。
episode: 15 FolderBrowserDialog の為ならば、Prism の InteractionRequest はもしかしたらコモンダイアログも Popup できるかもしれない。
2019/5/26 公開。
サブタイトル長過ぎシリーズ。WPF Prism 入門はこの episode: 15 で最終回の予定でしたが、Prism 7.2 がリリースされたため最終回はもう少し先になりました。
Prism の InteractionRequest から『ファイルを開くダイアログ』、『ファイルに名前を付けて保存ダイアログ』等のコモンダイアログを表示する方法を紹介しています。
併せて、ファイルを開くダイアログベースのフォルダ選択ダイアログを表示する方法も紹介しています。
episode: 15 では PopupWindowAction 等を使用してコモンダイアログを表示していますが、もっと簡単に表示する方法を episode: 17 で紹介しています。
対象 Prism Ver. Prism 6.3、7.1、7.2サブタイトルは『うちの娘の為ならば、俺はもしかしたら魔王も倒せるかもしれない。』より。
episode: 16 Prism7.2、ダイアログは IDialogService でって言ったよね!
2019/8/3 公開。
2019/7/25 未明にリリースされた Prism 7.2 の新機能である IDialogService の使用法を紹介しています。
サブタイトルは『私、能力は平均値でって言ったよね!』より。
episode: 17 IDialogService にコモンダイアログを求めるのは間違っているだろうか
2019/9/27 公開。
episode: 16 の補足と Prism からコモンダイアログを表示する方法を紹介しています。
サブタイトルは『ダンジョンに出会いを求めるのは間違っているだろうか』より。
extra: 5 ReactvieProperty の変更通知を Subscribe して MVVM 的にデータを更新する
episode: 18 Livet が Prism に「IDisposable 呼び出し用」としてゲッツされた件
2019/10/26 公開。
分割導入できるようになった Livet を Prism で作成しているサンプルアプリに組み込んで、VM を Dispose する方法を紹介しています。
加えて、Prism 7.2 から追加された IDestractible で UserControl を Dispose する方法も紹介しています。
尚、この episode: 18 から使用するフレームワークを .NET Core に変更しています。
対象 Prism Ver. Prism 7.2サブタイトルは『俺がお嬢様学校に「庶民サンプル」としてゲッツされた件』より。
episode: 19 MahApps.Metro と Material Design In XAML Toolkit たちは Prism でも余裕で生き抜くようです!
2019/11/10 公開。
サンプルアプリに MahApps.Metro と Material Design In XAML Toolkit をインストールしてマテリアルデザイン風の画面にする方法を紹介しています。
加えて、XAML へ Style タグを追加した場合に Material Design In XAML Toolkit のデザインテンプレートも有効にする方法も紹介しています。
サブタイトルは『超人高校生たちは異世界でも余裕で生き抜くようです!』より。
episode: 20 Prism ダイアログに MahApps.Metro が舞い降りた!
2019/12/08 公開。
Prism 7.2 で導入された IDialogService から表示するメッセージボックスやダイアログウィンドウを MahApps.Metro の MetroWindow にする方法を紹介しています。
又、Window Close 時に MVVM パターンで問い合わせメッセージを表示する方法を Livet の WindowCloseCancelBehavior を改造して実装する方法も併せて紹介しています。
とりあえず、episode: 20 で Prism 7.2 までの主な機能は紹介できたと思っているので現状では休止中です。
Prism のリポジトリでは次回リリースは Ver. 8.0 が予定されているようなので、それまではネタがありませんw
サブタイトルは『私に天使が舞い降りた!』より。