wpf - 如何在使用 PRISM 加载实际 Shell 之前显示初始屏幕和登录屏幕?

标签 wpf mvvm prism

当用户单击应用程序 3 秒钟时,我需要显示启动画面,然后我必须显示登录屏幕以进行凭据验证。如果它是有效用户,则应仅加载应用程序主 Shell。如何完成这个任务?

最佳答案

对于启动画面,您只需添加新项目/启动画面。一个 .png 文件将被添加到您的项目中,然后您可以自由编辑它或用另一个同名的 .png 文件替换它。

对于登录屏幕, ShowDialog() 它在您的主窗口 View 模型构造函数上,然后处理登录窗口的关闭事件以在用户未验证时关闭应用程序并在用户验证时关闭(我使用静态类来保存全局值,如用户 ID,取决于我选择关闭应用程序还是让它加载),它会改变人们在 viewModel 中实现 ShowDialog() 和 Close() 方法的方式,我想你已经想到了出来,看看我的登录窗口的这个 View 模型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using GlassStoreBLL;
using System.Windows;

namespace GlassStore.ViewModels
{
class LoginViewModel:ViewModelBase
{
    private String _UserName;
    private String _Password;
    private String _richMessage;
    private Commands.RelayCommand _login;
    private Commands.RelayCommand _closing;
    private IDialogueService _dialogService;
    private String _errorMessage;

    public LoginViewModel() : this(new DialogueService()) { }
    public LoginViewModel(IDialogueService dialogueService)
    {
        _dialogService = dialogueService;
        GlobalClass.userID = 0;
    }

    public String richMessage
    {

        get { return _richMessage; }
        set
        {
            if (_richMessage != value)
            {
                _richMessage = value;
                OnPropertyChanged("richMessage");
            }
        }
    }

    public String Password
    {
        get { return _Password; }
        set
        {
            if (_Password != value)
            {
                _Password = value;
                OnPropertyChanged("Password");
            }
        }
    }

    public String UserName
    {
        get { return _UserName; }
        set
        {
            if (_UserName != value)
            {
                _UserName = value;
                OnPropertyChanged("UserName");
            }
        }
    }

    public String errorMessage
    {
        get { return _errorMessage; }
        set
        {
            if (_errorMessage != value)
            {
                _errorMessage = value;
                OnPropertyChanged("errorMessage");
            }
        }
    }




    public ICommand login
    {
        get
        {
            if (_login == null)
            {
                _login = new Commands.RelayCommand(param => CanLogin(), param => Login());
            }

            return _login;
        }
    }

    public ICommand closing
    {
        get
        {
            if (_closing == null)
            {
                _closing = new Commands.RelayCommand(param => CanClosing(), param => Closing());
            }

            return _closing;
        }
    }

    private bool CanClosing()
    {
        return true;
    }

    private void Closing()
    {
        if (GlobalClass.userID == 0)
        {
            Application.Current.Shutdown();
        }
        else
        {

        }
    }

    private bool CanLogin()
    {
        return !String.IsNullOrEmpty(UserName) && !String.IsNullOrEmpty(Password);
    }

    private void Login()
    {
        try
        {
            User usr1 = new User();
            usr1 = usr1.userExists(UserName, Password);
            if (usr1.id == 0)
            {
                errorMessage = "اسم المستخدم أو كلمة السر أو الاثنان خطأ";
            }
            else
            {

                GlobalClass.userID = usr1.id;

                if (usr1.manager == "true")
                {
                    GlobalClass.manager = true;
                }
                else
                {
                    GlobalClass.manager = true;
                }


                var windows = Application.Current.Windows;
                for (var i = 0; i < windows.Count; i++)
                {
                    if (windows[i].DataContext == this)
                        _dialogService.Close(windows[i]);
                }
            }
        }
        catch (Exception d)
        {
            errorMessage = "خـطـأ";
            richMessage = d.Message;
        }
    }
}
}

关于wpf - 如何在使用 PRISM 加载实际 Shell 之前显示初始屏幕和登录屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7254903/

相关文章:

data-binding - 直接在 View 中绑定(bind)模型属性

c# - 使用 XAML 和 Xamarin 将母版页注入(inject)主从页面

PRISM 4 - RegisterViewWithRegion 和自定义导出属性

c# - 如何在WPF中的ListBox中根据高度显示项目?

c# - 有项目时,SelectionChanged 中的 Items.Count = 0

javascript - $scope 应该附加什么方法?

wpf - Prism:创建外壳后将模块加载到目录中

c# - WPF ItemsControl水平方向并填充父级?

WPF 资源工具提示未更新其大小

mvvm - 移动模拟器上的 Prism-Mvvm 应用程序部署错误