一、前言
這是一篇極簡的小短文。首先感謝站長和各位 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