WPF Prism 8.0 の新機能「複数のダイアログウィンドウのサポートが追加」について

はじめに

開発部の前嶋です。

2020年10月22日に、Prism 8.0がリリースされ、前回の記事 (WPF Prism を使ってみた) で触れたダイアログに新しい機能が追加されました。Prism 8.0のリリースノートには、「複数のダイアログウィンドウのサポートが追加された」とあります。どうやら、ダイアログを表示するウィンドウを指定できるようになったようです。

具体的にどのような機能が追加されたのか、実際に使ってみて、確認していきます。

環境

  • Visual Studio 2019
  • .NET Framework 4.8
  • Prism 8.0.0.1909

作成したアプリ

ダイアログを表示するだけのアプリを作成します。

作成したアプリの仕様:

  • 「DefaultWindowOpen」ボタン押下で、デフォルトのウィンドウにダイアログを表示する
  • 「GreenWindowOpen」ボタン押下で、緑色のウィンドウにダイアログを表示する
  • 「BlueWindowOpen」ボタン押下で、青色のウィンドウにダイアログを表示する
  • 親画面はダイアログから受け取った実行結果を表示します。

【初期表示】

初期表示画面。「Default Window Open」と「Green Window Open」、「Blue Window Open」の3つのボタンが表示されている。

【DefaultWindowOpen ボタン押下で表示されるダイアログ】

「デフォルトのウィンドウ」の文字と、「Close」ボタンが表示されている

【GreenWindowOpen ボタン押下で表示されるダイアログ】

背景が緑色になり、「緑色のウィンドウ」の文字と、「Close」ボタンが表示されている

【BlueWindowOpen ボタン押下で表示されるダイアログ】

背景が青色になり、「青色のウィンドウ」の文字と、「Close」ボタンが表示されている

【ダイアログを Close】

初期表示画面と同様に、「Default Window Open」と「Green Window Open」、「Blue Window Open」の3つのボタンが表示され、ボタンの下には「青色のウィンドウを閉じました」の文字が表示されている

実装

以下のファイルを作成します。

Visual Studio のソリューションエクスプローラーが表示されている

Prism 8.0 で追加された機能と関係がない箇所についての説明は省略します。

【App.xaml.cs】

RegisterTypes メソッドでダイアログを表示するウィンドウを登録します。
Prism 8.0で、ダイアログウィンドウは名前を付けて登録できるようになりました。
このサンプルでは、DefaultWindow は名前を付けずに登録し、GreenWindow、BlueWindow にそれぞれ名前を付けて登録しました。

DefaultWindow.xaml

【BlueWindow.xaml】

【GreenWindow.xaml】

DefaultWindow.xaml は特にスタイル等を設定していないウィンドウです。
GreenWindow.xaml、BlueWindow.xaml は、それぞれウィンドウの背景色を変更しています。

【DefaultWindow.xaml.cs】

コードビハインドです。
IDialogWindow インターフェイスを実装しています。
GreenWindow.xaml.cs、BlueWindow.xaml.cs も同様の為省略します。

【Sample.xaml】

初期表示で表示する View です。
それぞれのボタンに応じたダイアログを表示します。

【SampleViewModel.cs】

Sample.xaml の ViewModel です。
Prism 8.0 で、IDialogService ShowDialog の第4引数が追加されました。(IDialogService Show も同様)

コンテナに登録したウィンドウの名前を第 4 引数で指定することで、ダイアログを表示するウィンドウを選択できます。このサンプルでは、DefaultWindowOpen ボタン押下時には、ウィンドウを未指定、GreenWindowOpen、BuleWindowOpen ボタン押下時には、それぞれウィンドウを指定しています。

まとめ

「DefaultWindowOpen」ボタン押下で、背景色が白のウィンドウにダイアログが表示されたことで、ダイアログの呼び出しの際に、ウィンドウを指定しない場合は、コンテナに名前未指定で登録したウィンドウに、ダイアログが表示されます。

「GreenWindowOpen」ボタン押下で、背景色が緑色のウィンドウ、「BlueWindowOpen」ボタン押下で、背景色が青色のウィンドウにダイアログが表示されたことで、ダイアログの呼び出しの際に、ウィンドウを指定することが可能になっていることが分かりました。

Prism 8.0 のリリースにより、ダイアログを表示するウィンドウを指定することができるようになっていることを確認できました。

一応前回の続きということで書かせていただきましたが、ダイアログ関連のアップデートとしては地味目なもののようでした。Window 側に共通の機能を持たせた場合に、状況によってダイアログの Window を切り替えられるようになり、実装の選択肢も広がったというところでしょうか。

Prism を使用した MVVM パターンとしては、Window 側に機能があるという実装はどうなんでしょう?と感じるところはありますが、公式のリファレンスにあるように、Infragistics などのサードパーティ製のカスタムウィンドウを使用することを前提にするとあるべき変更だったのではないかと思います。

— 関連記事 —
WPF Prism を使ってみた

関連記事

  1. Azure Functions に挑戦!(Node.js から SQL…

  2. 続:現役大学生のプログラマー日記 その1

  3. ビーコンを使ったソリューションの紹介

  4. 高精度気圧センサDPS310の実力を試してみた 【前編】

  5. どんなもので囲うと電波が弱くなる?Beacon を使った電波強度実験を…

  6. 所変われば品変わる〜WEB開発と組み込み開発〜