WPF实战学习笔记31-登录界面全局通知

UI添加消息聚合器

xaml 复制代码
        <md:Snackbar
            x:Name="LoginSnakeBar"
            Grid.ColumnSpan="2"
            Panel.ZIndex="1"
            MessageQueue="{md:MessageQueue}" />

注册提示消息

文件:Mytodo.Views.LoginView.cs构造函数添加内容

c# 复制代码
//注册提示消息
aggregator.ResgiterMessage(arg =>
                           {
                               LoginSnakeBar.MessageQueue.Enqueue(arg.Message);
                           }, "Login");

在需要的地方添加提示消息

修改文件:Mytodo.ViewModels.LoginViewModel.cs

c# 复制代码
using AutoMapper;
using Mytodo.Extensions;
using Mytodo.Service;
using MyToDo.Api.Context;
using MyToDo.Share;
using MyToDo.Share.Models;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Shapes;

namespace Mytodo.ViewModels
{
    public class LoginViewModel : BindableBase, IDialogAware
    {


        #region 定义命令
        /// <summary>
        /// 执行登录|推出等相关命令
        /// </summary>
        public DelegateCommand<string> ExecuteCommand { get; set; }
        #endregion

        #region 定义属性

        public int SelectIndex
        {
            get { return selectIndex; }
            set { selectIndex = value; RaisePropertyChanged(); }
        }

        /// <summary>
        /// 注册区域字段
        /// </summary>
        public ResgiterUserDto RUserDto
        {
            get { return rUserDto; }
            set { rUserDto = value; RaisePropertyChanged(); }
        }

        public string Password
        {
            get { return password; }
            set { password = value; }
        }

        public string Account
        {
            get { return username; }
            set { username = value; }
        }


        #endregion

        #region 定义重要字段

        #endregion

        #region 定义普通字段
        private int selectIndex;
        private ResgiterUserDto rUserDto;
        private string password;
        private string username;
        private readonly ILoginService loginService;
        private readonly IEventAggregator aggregator;
        #endregion

        #region 命令方法
        /// <summary>
        /// ExecuteCommand对应的方法
        /// </summary>
        /// <param name="obj"></param>
        private void Execute(string obj)
        {
            switch (obj)
            {
                case "Login": Login(); break;
                case "LoginOut": LoginOut(); break;
                case "Resgiter": Resgiter(); break;
                case "ResgiterPage": SelectIndex = 1; break;
                case "Return": SelectIndex = 0; break;
            }
        }

        async private void Resgiter()
        {
            if (string.IsNullOrWhiteSpace(RUserDto.Account) ||
                            string.IsNullOrWhiteSpace(RUserDto.UserName) ||
                            string.IsNullOrWhiteSpace(RUserDto.PassWord) ||
                            string.IsNullOrWhiteSpace(RUserDto.NewPassWord))
            {
                aggregator.SendMessage("请输入完整的注册信息!", "Login");
                return;
            }

            if (RUserDto.PassWord != RUserDto.NewPassWord)
            {
                aggregator.SendMessage("密码不一致,请重新输入!", "Login");
                return;
            }

            var resgiterResult = await loginService.Resgiter(new UserDto()
            {
                Account = RUserDto.Account,
                UserName = RUserDto.UserName,
                PassWord = RUserDto.PassWord
            });

            if (resgiterResult != null && resgiterResult.Status)
            {
                //aggregator.SendMessage("注册成功", "Login");
                //注册成功,返回登录页页面
                SelectIndex = 0;
            }
           // else
                //aggregator.SendMessage(resgiterResult.Message, "Login");
        }

        async private void LoginOut()
        {
            if (string.IsNullOrWhiteSpace(Account) ||
               string.IsNullOrWhiteSpace(Password))
            {
                aggregator.SendMessage("Account或Password", "Login");
                return;
            }

            var loginResult = await loginService.Login(new UserDto()
            {
                Account = Account,
                PassWord = Password
            });

            if (loginResult != null && loginResult.Status)
            {
                RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
            }
            else
            {
                //登录失败提示...
                aggregator.SendMessage(loginResult.Message, "Login");
            }
        }

        async private void Login()
        {
            if (string.IsNullOrWhiteSpace(Account) ||
    string.IsNullOrWhiteSpace(Password))
            {
                aggregator.SendMessage("密码或账户为空,请重新输入", "Login");
                return;
            }

            var loginResult = await loginService.Login(new UserDto()
            {
                Account = Account,
                PassWord = Password
            });

            if (loginResult != null && loginResult.Status)
            {
                RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
            }
            else
            {
                //登录失败提示...
                aggregator.SendMessage(loginResult.Message, "Login");
            }
        }

        #endregion

        #region 启动项

        #endregion

        #region 继承
        public string Title { get; set; } = "Todo";
        

        public event Action<IDialogResult> RequestClose;

        public bool CanCloseDialog()
        {
            return true;
        }

        public void OnDialogClosed()
        {
            LoginOut();
        }

        public void OnDialogOpened(IDialogParameters parameters)
        {

        }
        #endregion

        public LoginViewModel(ILoginService loginService, IEventAggregator aggregator)
        {
            //初始化对象
            RUserDto=new ResgiterUserDto();


            ExecuteCommand = new DelegateCommand<string> (Execute);
            this.loginService = loginService;
            this.aggregator = aggregator;
        }
    }
}
相关推荐
淮北49420 小时前
vim学习进阶
学习·编辑器·vim
智者知已应修善业21 小时前
【proteus中lm339电压滞回比较器达到三角波转换成方波】2023-4-13
驱动开发·经验分享·笔记·硬件架构·proteus·硬件工程
551只玄猫1 天前
新编大学德语1第三版笔记 第5课Essen und Trinken
笔记·学习笔记·德语·外语·德语a1·自学德语·新编大学德语
sayang_shao1 天前
ARM架构运行模式学习笔记
arm开发·学习·架构
不只会拍照的程序猿1 天前
《嵌入式AI筑基笔记02:Python数据类型01,从C的“硬核”到Python的“包容”》
人工智能·笔记·python
happymaker06261 天前
web前端学习日记——DAY04
前端·学习
solicitous1 天前
遇到一个口头机遇
学习·生活
观书喜夜长1 天前
大模型应用开发学习-基于 LangChain 框架实现的交互式问答脚本
python·学习
中屹指纹浏览器1 天前
2026指纹浏览器性能瓶颈分析与优化技巧
经验分享·笔记
FPGA小迷弟1 天前
FPGA 时序约束基础:从时钟定义到输入输出延迟的完整设置
前端·学习·fpga开发·verilog·fpga