Prism For WPF Login对话框又简单又合理的方案之一

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prism For WPF Login对话框又简单又合理的方案之一相关的知识,希望对你有一定的参考价值。

一、前言

这是一篇极简的小短文。首先感谢站长和各位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

以上是关于Prism For WPF Login对话框又简单又合理的方案之一的主要内容,如果未能解决你的问题,请参考以下文章

WPF - Prism 7.1 - 导航 - 掌握选项卡控件 - 模态/对话框窗口

使用 Prism 和 MVVM 模式在 WPF 中创建模态对话框的“漂亮”方式

WPF Prism 对话框窗口 - 绑定到 DialogWindow 的宽度和高度

基于WPF&Prism&AvalonEdit的XAML轻量编辑器

基于WPF&Prism&AvalonEdit的XAML轻量编辑器

01Prism WPF 入门实战 - 项目准备