一、前言
这是一篇极简的小短文。首先感谢站长和各位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正常写写就行。