2
1

More than 3 years have passed since last update.

別のWindowを表示する

Last updated at Posted at 2021-04-10

はじめに

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)を指定するようにすれば汎用的に使用することもできます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1