一、はじめに
これは非常に簡潔な短い記事です。まず、サイト管理者と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