Prism For WPF Login對話方塊又簡單又合理的方案之一

Prism For WPF Login對話方塊又簡單又合理的方案之一

這是一篇極簡的小短文。

最後更新 2022/1/10 下午8:08
沙漠尽头的狼
預計閱讀 2 分鐘
分類
WPF
專題
WPF MVVM框架 Prism系列
標籤
.NET C# WPF Prism

一、前言

這是一篇極簡的小短文。首先感謝站長和各位 WPF 大佬對我的指導,我學到了很多,還是關於利用 Prism 做 Login 對話方塊的事情,看到站長發過一篇《WPF Prism 框架 Region 失效了?》,目前我有一個自認為更合適的解決方法,給大家報告一下:

二、主體內容

精髓就一句話,在主 App 這個類別裡重載 protected override void OnInitialized() 這個方法,然後 login.ShowDialog() 的邏輯寫在裡面就 ok 了,具體看以下程式碼:

namespace Wpf1
{
    /// <summary>
    /// Interaction logic for 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 正常寫寫就行。

作者:王景浩

微信 ID:daidai_cn

繼續探索

延伸閱讀

更多文章