C#の WPF Prism でダイアログ画面(別ウィンドウ)を表示する方法について説明します。
対象ファイル(例)
コーディングが必要なファイルは下記の A~D です。
Views/
|-MainWindowView.xaml(画面遷移元) ・・・A
|-SampleTableEditView.xaml(画面遷移先)
ViewModels/
|-MainWindowViewModel.cs(画面遷移元) ・・・B
|-SampleTableEditViewModel.cs(画面遷移先) ・・・C
App.xaml.cs ・・・D
MainWindowView.xaml(画面遷移元) ・・・A
①ボタンにCommandを追加
画面遷移元のViewのボタンに対して、CommandにBindingでデリゲートコマンド名称を記載します。
<Button Content="SampleTable編集"
FontSize="14"
Margin="10"
Padding="5"
Command="{Binding SampleTableEditViewButton}"/>
MainWindowViewModel.cs(画面遷移元) ・・・B
②ViewModelにIDialogServiceの変数を追加
画面遷移元のViewModelに、IDialogServiceのプライベート変数を追加し、コンストラクタでセットします。
③ボタン押下時の実行メソッドを追加
ボタン押下イベントを受け取るデリゲートコマンドのプロパティを追加し、ボタン押下時のExcuteメソッドを実装します。
上記②~③のコード例は下記となります。
//// コンストラクタ
public MainWindowViewModel(IDialogService dialogService)
{
//// 画面遷移用(ダイアログ)
_dialogService = dialogService;
SampleTableEditViewButton = new DelegateCommand(SampleTableEditViewButtonExecute);
}
public DelegateCommand SampleTableEditViewButton { get; }
private void SampleTableEditViewButtonExecute()
{
//// 画面遷移処理(ダイアログ)
_dialogService.ShowDialog(nameof(SampleTableEditView), null, null);
}
SampleTableEditViewModel.cs(画面遷移先) ・・・C
④IDialogAwareインターフェースを実装
画面遷移先のViewModelに、IDialogAwareインターフェース を実装します。
⑤CanCloseDialogメソッドを変更
IDialogAwareを実装した事で追加される CanCloseDialog() メソッドに、 retun true を記載します。 trueを返す事で、ダイアログを閉じる事が可能となります。
▼上記④~⑤のサンプルコード
public class SampleTableEditViewModel : BindableBase, IDialogAware
{
//// 各種処理
public bool CanCloseDialog()
{
return true; //// true:画面を閉じる事が可能
}
}
App.xaml.cs ・・・D
⑥RegisterTypes内でViewを登録
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
//// ダイアログ画面(別画面に表示) ※ViewModelにIDialogAware実装が必要
containerRegistry.RegisterDialog<SampleTableEditView, SampleTableEditViewModel>();
}
containerRegistry.RegisterDialogに設定したViewがダイアログ表示可能となります。