Prism For WPF ログインダイアログの簡単かつ合理的な方法の一つ

Prism For WPF ログインダイアログの簡単かつ合理的な方法の一つ

これは極めてシンプルな小文です。

最終更新 2022/01/10 20:08
沙漠尽头的狼
読了目安 2 分
カテゴリ
WPF
テーマ
WPF MVVMフレームワーク Prismシリーズ
タグ
.NET C# WPF Prism

一、はじめに

これは非常に簡潔な短い記事です。まず、サイト管理者とWPFの先輩方のご指導に感謝します。多くのことを学びました。Prismを使用してログインダイアログを作成する件についてですが、サイト管理者が「WPF Prism フレームワーク Region が無効になる?」という記事を投稿されていました。現在、私がより適切だと思う解決方法がありますので、ご報告します。

二、主要内容

核心は一言で言えば、メインAppクラスでprotected override void OnInitialized()メソッドをオーバーライドし、その中でlogin.ShowDialog()のロジックを書くだけです。具体的には以下のコードをご覧ください:

namespace Wpf1
{
    /// <summary>
    /// App.xaml の相互作用ロジック
    /// </summary>
    public partial class App
    {
        protected override Window CreateShell()
        {

             return Container.Resolve<MainWindow>();

        }
        protected override void RegisterTypes (IContainerRegistry containerRegistry)
        {

        }
        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {

        }
        protected override void OnInitialized()
        {
            var login = Container.Resolve<Login>();
            var loginResult = login.ShowDialog();
            if (loginResult.Value)
               base.OnInitialized();
            else
               Application.Current.Shutdown();
        }
    }
}

次に、Login.xaml.csの「ログイン」および「終了」ボタンのClickイベントに以下のように記述します

private void Btn1_Click(object sender, RoutedEventArgs e)
{
    // ログイン
    DialogResult = true;
}
private void Btn2_Click(object sender, RoutedEventArgs e)
{
    // 終了
    DialogResult = false;
}

これで完了です。非常に簡単です。重要なのは、APP内でprotected override void OnInitialized()メソッドをオーバーライドすることです。これにより、Loginがロードされる際に同時にMainWindowViewModelがロードされるのを防げます。ただし、注意点が一つあります。この時点ではPrismのRegionがまだ有効になっていないようです。Prismのビューインジェクションやビューディスカバリーを使用してLoginにビューを追加することはできません。幸い、一般的なLoginはそれほど複雑ではないので、Login.xamlに通常通り記述するだけで問題ありません。

作者:王景浩

WeChat ID:daidai_cn

さらに探索

関連読書

その他の記事