はじめに
PrismでMVVMパターンを使用していると、基本的にWindowは一つで、RegionにModuleを表示させるのが基本的な流れです。
Webアプリや最近のアプリでは、Single Windowが基本のように思いますが、業務アプリを作成していると、複数のWindowを使用する必要がでる場合があります。
昔は、MDIアプリケーションが一般的だったように思うのですが、最近はあまり見かけなくなりました。
複数のWindowを使用するアプリを作るために、メインWindowとは別のWindowを表示させる方法の一つを紹介します。
方法は旧来からあるものです。
ただ、以前アプリを開発していた時に、どうすればいいのか悩んだことがあるので、プログラミングを始めたばかりの人には悩みどころの一つではないかと思います。
別Winodowの表示
基本的には、Win Formsでも同じですが、ボタンをクリックしたら、別Windowを表示させるためのコードです。
ボタンをクリックするたびに、Windowが表示されるのは防ぐようにしています。
// ボタンをクリックで呼び出すコード
private void ShowWindow()
{
// SampleWindow : WPF のView
Type winType = typeof(SampleWindow);
// Windowのインスタンスを取得
Window win = GetWindowInstance(winType);
// Windowを表示させます
win.Show();
win.Title = "サンプル";
win.Activate();
win.WindowState = WindowState.Normal;
}
// Windowのインスタンス取得処理
private Window GetWindowInstance(Type winType)
{
// Windowsを取得
Window win;
win =System.Windows.Application.Current.Windows
.OfType<Window>()
.SingleOrDefault(w => w.GetType() == winType);
// まだ表示されていない場合はインスタンスを生成する
if (win == null)
{
win = (Window)Activator.CreateInstance(winType, _regionManager);
}
return win;
}
CreateInstanceの引数に_regionManagerがありますが、Prismを利用していて、Viewの引数にregionManagerがあるためです。
ShowWindowのところで、引数にView(Window)を指定するようにすれば汎用的に使用することもできます。