WPF实战学习笔记30-登录、注册服务添加

这篇具有很好参考价值的文章主要介绍了WPF实战学习笔记30-登录、注册服务添加。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

登录、注册服务添加

  • 添加注册数据类型
  • 添加注册UI
  • 修改bug
    • UserDto的UserName更改为可null类型
    • Resgiter 添加加密方法
    • 修改控制器

添加注册数据类型

添加文件MyToDo.Share.Models.ResgiterUserDto.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyToDo.Share.Models
{
    public class ResgiterUserDto: BaseDto
    {
        private string userName;

        public string UserName
        {
            get { return userName; }
            set { userName = value; OnPropertyChanged(); }
        }

        private string account;

        public string Account
        {
            get { return account; }
            set { account = value; OnPropertyChanged(); }
        }

        private string passWord;

        public string PassWord
        {
            get { return passWord; }
            set { passWord = value; OnPropertyChanged(); }
        }

        private string newpassWord;

        public string NewPassWord
        {
            get { return newpassWord; }
            set { newpassWord = value; OnPropertyChanged(); }
        }
    }
}

添加注册UI

修改文件:Mytodo.Views.LoginView.xaml

<UserControl
    x:Class="Mytodo.Views.LoginView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
    xmlns:local="clr-namespace:Mytodo.Views"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
    xmlns:pass="clr-namespace:Mytodo.Extensions"
    xmlns:prism="http://prismlibrary.com/"
    mc:Ignorable="d">
    <prism:Dialog.WindowStyle>
        <Style TargetType="Window">
            <Setter Property="Width" Value="600" />
            <Setter Property="Height" Value="400" />
            <Setter Property="SizeToContent" Value="WidthAndHeight" />
            <Setter Property="ResizeMode" Value="NoResize" />
            <Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
        </Style>
    </prism:Dialog.WindowStyle>
    <Grid Width="350" Height="400">
        <md:Snackbar
            x:Name="LoginSnakeBar"
            Grid.ColumnSpan="2"
            Panel.ZIndex="1"
            MessageQueue="{md:MessageQueue}" />
        <md:Transitioner SelectedIndex="{Binding SelectIndex, FallbackValue=0}">
            <md:TransitionerSlide>
                <DockPanel Margin="15,5,15,20" VerticalAlignment="Center">
                    <md:PackIcon
                        Width="100"
                        Height="80"
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        md:ThemeAssist.Theme="Dark"
                        DockPanel.Dock="Top"
                        Foreground="SpringGreen"
                        Kind="AccountOutline" />
                    <TextBlock
                        Margin="0,10"
                        DockPanel.Dock="Top"
                        FontSize="22"
                        FontWeight="Bold"
                        Text="欢迎使用" />

                    <TextBox
                        Margin="0,10"
                        md:HintAssist.Hint="请输入账号"
                        DockPanel.Dock="Top"
                        Text="{Binding Account}" />
                    <PasswordBox
                        Margin="0,10"
                        md:HintAssist.Hint="请输入密码"
                        pass:PassWordExtensions.PassWord="{Binding Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                        DockPanel.Dock="Top">
                        <i:Interaction.Behaviors>
                            <pass:PasswordBehavior />
                        </i:Interaction.Behaviors>
                    </PasswordBox>

                    <Button
                        Command="{Binding ExecuteCommand}"
                        CommandParameter="Login"
                        Content="登录系统"
                        DockPanel.Dock="Top" />

                    <DockPanel Margin="0,5" LastChildFill="False">
                        <TextBlock Text="注册账号">
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="MouseLeftButtonDown">
                                    <i:InvokeCommandAction Command="{Binding ExecuteCommand}" CommandParameter="ResgiterPage" />
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                        </TextBlock>
                        <TextBlock DockPanel.Dock="Right" Text="忘记密码?" />
                    </DockPanel>
                </DockPanel>
            </md:TransitionerSlide>
            <md:TransitionerSlide>
                <DockPanel Margin="15" VerticalAlignment="Center">
                    <md:PackIcon
                        Width="100"
                        Height="80"
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        md:ThemeAssist.Theme="Dark"
                        DockPanel.Dock="Top"
                        Foreground="SpringGreen"
                        Kind="AccountOutline" />
                    <TextBlock
                        Margin="0,10"
                        DockPanel.Dock="Top"
                        FontSize="22"
                        FontWeight="Bold"
                        Text="注册账号" />

                    <TextBox
                        Margin="0,5"
                        md:HintAssist.Hint="请输入用户名"
                        DockPanel.Dock="Top"
                        Text="{Binding RUserDto.Account}" />
                    <TextBox
                        Margin="0,5"
                        md:HintAssist.Hint="请输入账号"
                        DockPanel.Dock="Top"
                        Text="{Binding RUserDto.UserName}" />

                    <PasswordBox
                        Margin="0,5"
                        md:HintAssist.Hint="请输入密码"
                        pass:PassWordExtensions.PassWord="{Binding RUserDto.PassWord, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                        DockPanel.Dock="Top">
                        <i:Interaction.Behaviors>
                            <pass:PasswordBehavior />
                        </i:Interaction.Behaviors>
                    </PasswordBox>

                    <PasswordBox
                        Margin="0,5"
                        md:HintAssist.Hint="请再次输入密码"
                        pass:PassWordExtensions.PassWord="{Binding RUserDto.NewPassWord, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                        DockPanel.Dock="Top">
                        <i:Interaction.Behaviors>
                            <pass:PasswordBehavior />
                        </i:Interaction.Behaviors>
                    </PasswordBox>

                    <Button
                        Command="{Binding ExecuteCommand}"
                        CommandParameter="Resgiter"
                        Content="注册账号"
                        DockPanel.Dock="Top" />

                    <Button
                        Margin="0,10"
                        Command="{Binding ExecuteCommand}"
                        CommandParameter="Return"
                        Content="返回登录"
                        DockPanel.Dock="Top"
                        Style="{StaticResource MaterialDesignOutlinedButton}" />
                </DockPanel>
            </md:TransitionerSlide>
        </md:Transitioner>



    </Grid>
</UserControl>

添加注册、登录、退出等功能实现以及功能的字段

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))
            {
                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))
            {
                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;
        }

    }
}

修改bug

  1. UserDto的UserName更改为可null类型

    修改文件:MyToDo.Share.Models.UserDto.cs

    public string UserName
    

    –>

		public string? UserName
  1. Resgiter 添加加密方法

    修改文件:MyToDo.Api.Service.cs

    model.CreateDate = DateTime.Now;后添加

    model.Password = model.Password.GetMD5();
    
  2. 修改控制器

    修改文件:MyToDo.Api.Controllers.LoginController

     [HttpGet]
            public async Task<ApiReponse> LoginAsync(string Account, string PassWord) => await service.LoginAsync(Account,PassWord);
    

    修改为文章来源地址https://www.toymoban.com/news/detail-619617.html

    [HttpPost]
            public async Task<ApiReponse> Login([FromBody] UserDto param) => await service.LoginAsync(param.Account, param.PassWord);
    

到了这里,关于WPF实战学习笔记30-登录、注册服务添加的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF实战学习笔记23-首页添加功能

    实现ITodoService、IMemoService接口,并在构造函数中初始化。 新建 ObservableCollectionToDoDto 、 ObservableCollectionMemoDto 类型的属性,并将其绑定到UI中 修改Addtodo、Addmemo函数,将添加功能添加 添加添加函数 修改文件:Mytodo.ViewModels.IndexViewModel.cs

    2024年02月15日
    浏览(37)
  • WPF实战学习笔记31-登录界面全局通知

    UI添加消息聚合器 注册提示消息 文件:Mytodo.Views.LoginView.cs构造函数添加内容 在需要的地方添加提示消息 修改文件:Mytodo.ViewModels.LoginViewModel.cs

    2024年02月14日
    浏览(41)
  • WPF实战学习笔记22-添加自定义询问窗口

    详细代码:https://github.com/DongLiqiang/Mytodo/commit/221de6b2344d5c861f1d3b2fbb2480e3e3b35c26 添加自定义询问窗口显示方法 修改文件Mytodo.Extensions.DialogExtension 添加内容,类中添加内容 自定义窗体 自定义界面 添加文件Mytodo.Views.MsgView.xaml 添加窗体模型 添加文件:Mytodo.ViewModels.MsgViewModel 依赖

    2024年02月15日
    浏览(44)
  • WPF实战学习笔记19-备忘录添加功能

    由于todoview 和 memoview的相似度很高,可复制todoview 的代码。 memoviewmodel.cs memo.view 修改控制器

    2024年02月15日
    浏览(38)
  • WPF实战学习笔记17-TodoView 添加新增、编辑、查询功能

    修改TodoViewModel.cs 修改XAML 添加引用 添加绑定 添加项目的双击事件 修改ToDoService 修改MyToDo.Api/Service/ToDoService.cs

    2024年02月15日
    浏览(39)
  • WPF实战项目十四(API篇):登录注册接口

    1、新建UserDto.cs 2、新增ILoginService接口 3、实现LoginService接口 4、新增登录控制器LoginController 5、添加AutoMapper映射关系 6、在program.cs里面添加服务 7、F5运行项目

    2024年02月10日
    浏览(38)
  • WPF实战学习笔记27-全局通知

    新建消息事件 添加文件:Mytodo.Common.Events.MessageModel.cs 注册、发送提示消息 UI增加Snackbar 修改文件:Mytodo.Views.MainView.xaml 注册消息 修改文件:Mytodo.Views.MainViewcs 构造函数添加 要注意的是,我们要发送的是文本,所以,this.skbar.MessageQueue.Enqueue函数内发送的是文本。 在需要的地

    2024年02月15日
    浏览(39)
  • WPF实战学习笔记26-首页导航

    修改UI,添加单击行为,并绑定导航命令 修改文件:Mytodo.Views.IndexView.xaml ,在导航梯形添加内容 添加导航命令,并初始化 修改文件:indexviewmodel.cs 添加导航区域变量,并初始化 修改文件:indexviewmodel.cs 添加导航方法 TaskBars添加对应的导航区域 修改OnNavigate方法 当为“已完成

    2024年02月15日
    浏览(33)
  • WPF实战学习笔记16-数据加载

    新建Update事件,增加Prism事件列表 新建文件Mytodo/Common/Events/UpdateLoadingEvent.cs 新建含加载窗体基类 新建文件Mytodo/ViewModels/NavigationViewModel.cs 建立数据加载窗体扩展方法 新建文件Mytodo/Extensions/DialogExtension.cs 主窗口命名 修改文件Mytodo/Extensions/DialogExtension.cs 主窗口订阅消息 修改文

    2024年02月15日
    浏览(39)
  • WPF实战学习笔记25-首页汇总

    注意:本实现与视频不一致。本实现中单独做了汇总接口,而视频中则合并到国todo接口当中了。 添加汇总webapi接口 添加汇总数据客户端接口 总数据客户端接口对接3 首页数据模型 添加数据汇总字段类 新建文件MyToDo.Share.Models.SummaryDto 添加汇总webapi接口 添加汇总接口 添加文

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包