WPF实战学习笔记17-TodoView 添加新增、编辑、查询功能

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

TodoView 添加新增、编辑、查询功能

修改TodoViewModel.cs

using Mytodo.Common.Models;
using Mytodo.Service;
using Prism.Commands;
using Prism.Ioc;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using MyToDo.Share.Models;
using System.Threading.Tasks;
using Prism.Regions;
using System.Windows;

namespace Mytodo.ViewModels
{
    public class TodoViewModel: NavigationViewModel
    {
        #region 命令定义

        /// <summary>
        /// 展开侧边栏
        /// </summary>
        public DelegateCommand OpenRightContentCmd { set; get; }

        /// <summary>
        /// 打开选择的项
        /// </summary>
        public DelegateCommand<ToDoDto> SelectedCommand { get; set; }

        /// <summary>
        /// 添加、编辑 项
        /// </summary>
        public DelegateCommand<string> ExecuteCommand { get; set; }

        #endregion

        #region 属性定义

        /// <summary>
        /// 当前选中项
        /// </summary>
        public ToDoDto? CurrDto
        {
            get { return currDto; }
            set { currDto = value; RaisePropertyChanged(); }
        }

        /// <summary>
        /// 指示侧边栏是否展开
        /// </summary>
        public bool IsRightOpen
        {
            get { return isRightOpen; }
            set { isRightOpen = value; RaisePropertyChanged(); }
        }

        /// <summary>
        /// todo集合
        /// </summary>
        public ObservableCollection<ToDoDto>? TodoDtos
        {
            get { return todoDtos; }
            set { todoDtos = value; RaisePropertyChanged(); }
        }

        /// <summary>
        /// 右侧侧边栏标题
        /// </summary>
        public string RightContentTitle
        {
            get { return rightContentTitle; }
            set { rightContentTitle = value;RaisePropertyChanged(); }
        }

        /// <summary>
        /// 要搜索的字符串
        /// </summary>
        public string SearchString
        {
            get { return search; }
            set { search = value; RaisePropertyChanged(); }
        }

        #endregion

        #region 重要字段定义

        private readonly ITodoService service;

        #endregion

        #region 字段定义
        private ToDoDto currDto;
        private bool isRightOpen;
        private ObservableCollection<ToDoDto>? todoDtos;
        private string rightContentTitle;
        private string search;



        #endregion

        #region 命令方法

        private void ExceuteCmd(string obj)
        {
            switch (obj)
            {
                case "添加":
                    Add(); break;
                case "查询":
                    Query();break;
                case "保存":
                    Save(); break;
            }
        }

        private async void Save()
        {
            try
            {
                if (string.IsNullOrWhiteSpace(CurrDto.Title) || string.IsNullOrWhiteSpace(CurrDto.Content))
                    return;

                UpdateLoding(true);

                if(CurrDto.Id>0) //编辑项
                {
                    var updateres = await service.UpdateAsync(CurrDto);
                    if (updateres.Status)
                    {
                        var todo = TodoDtos.FirstOrDefault(t => t.Id == CurrDto.Id);
                        if (todo != null)
                        {
                            todo.Title=CurrDto.Title; 
                            todo.Content=CurrDto.Content;
                            todo.Status=todo.Status;
                        }
                    }
                    else
                    {
                        MessageBox.Show("更新失败");

                    }

                }
                else
                {       
                    //添加项
                    var add_res =   await service.AddAsync(CurrDto);
                    //刷新
                    if (add_res.Status) //如果添加成功
                    {
                        TodoDtos.Add(add_res.Result);
                    }
                    else
                    {
                        MessageBox.Show("添加失败");

                    }
                       
                }
            }
            catch
            {

            }
            finally
            {
                IsRightOpen = false;
                //卸载数据加载窗体
                UpdateLoding(false);
            }
        }

        /// <summary>
        /// 打开待办事项弹窗
        /// </summary>
        void Add()
        {
            CurrDto = new ToDoDto();
            IsRightOpen = true;
        }

        private void Query()
        {
            GetDataAsync();
        }

        /// <summary>
        /// 获取所有数据
        /// </summary>
        async void GetDataAsync()
        {
            //调用数据加载页面
            UpdateLoding(true);

            var todoResult = await service.GetAllAsync(new MyToDo.Share.Parameters.QueryParameter { PageIndex = 0, PageSize = 100,Search=SearchString });

            if (todoResult.Status)
            {
                todoDtos.Clear();
                foreach (var item in todoResult.Result.Items)
                    todoDtos.Add(item);
            }

            //卸载数据加载页面
            UpdateLoding(false);
        }

        /// <summary>
        /// 弹出详细信息
        /// </summary>
        /// <param name="obj"></param>
        private async void Selected(ToDoDto obj)
        {
            var todores = await service.GetFirstOfDefaultAsync(obj.Id);
            if(todores.Status)
            {
                CurrDto = todores.Result;
                IsRightOpen = true;
                RightContentTitle = "我的待办";
            }
        }
        #endregion

        public TodoViewModel(ITodoService service,IContainerProvider provider) : base(provider)
        {
            //初始化对象
            TodoDtos = new ObservableCollection<ToDoDto>();  
            RightContentTitle = "添加血雨待办";

            //初始化命令
            SelectedCommand         = new DelegateCommand<ToDoDto>(Selected);
            OpenRightContentCmd     = new DelegateCommand(Add);
            ExecuteCommand          = new DelegateCommand<string>(ExceuteCmd);

            this.service = service;
        }


        public override void OnNavigatedTo(NavigationContext navigationContext)
        {
            base.OnNavigatedTo(navigationContext);

            GetDataAsync();
        }

    }
}

修改XAML

添加引用

xmlns:i="http://schemas.microsoft.com/xaml/behaviors"

添加绑定

<md:DrawerHost.RightDrawerContent>
    <DockPanel
               MinWidth="200"
               MaxWidth="240"
               Margin="2"
               LastChildFill="False">
        <TextBlock
                   Margin="10"
                   DockPanel.Dock="Top"
                   FontFamily="微软雅黑"
                   FontSize="20"
                   FontWeight="Bold"
                   Text="{Binding RightContentTitle}" />
        <StackPanel
                    Margin="10"
                    DockPanel.Dock="Top"
                    Orientation="Horizontal">
            <TextBlock
                       Margin="5"
                       VerticalAlignment="Center"
                       FontFamily="微软雅黑"
                       FontSize="14"
                       Text="状态" />
            <ComboBox Margin="5">
                <ComboBoxItem Content="已完成" FontSize="12" />
                <ComboBoxItem Content="未完成" FontSize="12" />
            </ComboBox>
        </StackPanel>
        <TextBox
                 Margin="10"
                 md:HintAssist.Hint="待办事项标题"
                 DockPanel.Dock="Top"
                 FontFamily="微软雅黑"
                 FontSize="12"
                 Text="{Binding CurrDto.Title}" />
        <TextBox
                 MinHeight="50"
                 Margin="10"
                 md:HintAssist.Hint="待办事项内容"
                 DockPanel.Dock="Top"
                 FontFamily="微软雅黑"
                 FontSize="12"
                 Text="{Binding CurrDto.Content}"
                 TextWrapping="Wrap" />
        <Button
                Margin="10,5"
                HorizontalAlignment="Center"
                Command="{Binding ExecuteCommand}"
                CommandParameter="保存"
                Content="保存"
                DockPanel.Dock="Top" />
    </DockPanel>
</md:DrawerHost.RightDrawerContent>

添加项目的双击事件

<Border MinWidth="200" Margin="10">
    <Grid MinHeight="150">
        <!--  给项目添加行为  -->
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeftButtonUp">
                <i:InvokeCommandAction Command="{Binding DataContext.SelectedCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}}" CommandParameter="{Binding}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto" />
            <RowDefinition />
        </Grid.RowDefinitions>
        <DockPanel LastChildFill="False">
            <TextBlock
                       Margin="10,10"
                       FontFamily="黑体"
                       FontSize="14"
                       Text="{Binding Title}" />
            <md:PackIcon
                         Margin="10,10"
                         VerticalContentAlignment="Top"
                         DockPanel.Dock="Right"
                         Kind="More" />
        </DockPanel>
        <TextBlock
                   Grid.Row="1"
                   Margin="10,5"
                   FontFamily="黑体"
                   FontSize="12"
                   Opacity="0.7"
                   Text="{Binding Content}" />
        <Canvas Grid.RowSpan="2" ClipToBounds="True">
            <Border
                    Canvas.Top="10"
                    Canvas.Right="-50"
                    Width="120"
                    Height="120"
                    Background="#FFFFFF"
                    CornerRadius="100"
                    Opacity="0.1" />
            <Border
                    Canvas.Top="80"
                    Canvas.Right="-30"
                    Width="120"
                    Height="120"
                    Background="#FFFFFF"
                    CornerRadius="100"
                    Opacity="0.1" />
        </Canvas>
        <Border
                Grid.RowSpan="2"
                Background="#ffcccc"
                CornerRadius="5"
                Opacity="0.3" />
    </Grid>
</Border>

修改ToDoService

修改MyToDo.Api/Service/ToDoService.cs文章来源地址https://www.toymoban.com/news/detail-614657.html

public async Task<ApiReponse> GetAllAsync(QueryParameter parameter)
{
    try
    {
        //获取数据
        var resposity = work.GetRepository<Todo>();

        //根据查询条件查询
        var todos = await resposity.GetPagedListAsync(predicate: x => string.IsNullOrWhiteSpace(parameter.Search) ? true : x.Title.Contains(parameter.Search), pageIndex: parameter.PageIndex, pageSize: parameter.PageSize, orderBy: source => source.OrderByDescending(t => t.CreateDate));
        return new ApiReponse(true, todos);
    }
    catch (Exception ex)
    {
        return new ApiReponse(ex.Message, false);
    }
} 

到了这里,关于WPF实战学习笔记17-TodoView 添加新增、编辑、查询功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • WPF实战学习笔记19-备忘录添加功能

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

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

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

    2024年02月15日
    浏览(45)
  • WPF实战学习笔记21-自定义首页添加对话服务

    定义接口与实现 添加自定义添加对话框接口 添加文件:Mytodo.Dialog.IDialogHostAware.cs 添加自定义添加对话框显示接口 注意dialogHostName应与view中dialoghost 的Identifier属性一致 实现IDialogHostService接口 添加文件:Mytodo.Dialog.DialogHostService.cs DialogHostService实现了自定义的IDialogHostService接口

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

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

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

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

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

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

    2024年02月15日
    浏览(37)
  • WPF实战学习笔记04-菜单导航

    添加文件与文件夹 添加文件夹 ​ ./Extensions 添加文件 类型:用户控件 ./Views/IndexView.xaml ./Views/MemoView.xaml ./Views/TodoView.xaml ./Views/SettingsView.xaml ./ViewModels/IndexViewModel.cs ./ViewModels/IndexViewModel.cs ./ViewModels/IndexViewModel.cs ./ViewModels/IndexViewModel.cs ./Extensions/PrismManager.cs 建立View与Vie

    2024年02月16日
    浏览(72)
  • WPF实战学习笔记28-登录界面

    添加登录界面UI 添加文件loginview.xaml。注意本界面使用的是md内的图标。没有登录界面的图片 添加对应的viewmodel 添加文件Mytodo.ViewModels.LoginViewModel.cs 注册视图 添加启动 修改文件:App.xmal.cs

    2024年02月14日
    浏览(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实战学习笔记08-创建数据库

    创建文件夹 ./Context 创建文件 ./Context/BaseEnity.cs ./Context/Memo.cs ./Context/MyTodoContext.cs ./Context/Todo.cs ./Context/User.cs 创建数据对象 ./Context/BaseEnity.cs ./Context/Memo.cs ./Context/MyTodoContext.cs 创建数据库DbSet ./Context/Todo.cs ./Context/User.cs 添加nuget包 Microsoft.EntityFrameworkCore.Design Shared design-time co

    2024年02月16日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包