Wpf 使用 Prism 实战开发Day25

news2024/9/23 5:26:47

首页待办事项及备忘录添加功能

一.修改待办事项和备忘录逻辑处理类,即AddMemoViewModel和AddTodoViewModel 

1.AddMemoViewModel 逻辑处理类,添加View视图数据要绑定的实体类 Model

 public class AddMemoViewModel :BindableBase,IDialogHostAware
 {
     public AddMemoViewModel()
     {
         CancelCommand = new DelegateCommand(Cancel);
         SaveCommand = new DelegateCommand(Save);
     }

     public string DialogHostName { get; set; }
     public DelegateCommand CancelCommand { get; set; }
     public DelegateCommand SaveCommand { get; set; }

     private MemoDto model;
     //视图新增或编辑数据绑定实体类
     public MemoDto Model
     {
         get { return model; }
         set { model = value;RaisePropertyChanged(); }
     }


     public void OnDialogOpend(IDialogParameters parameters)
     {
         //窗口打开的过程中,初始化数据
         if (parameters.ContainsKey("Value")) 
         {
             Model = parameters.GetValue<MemoDto>("Value");//编辑
         }
         else
         {
             Model = new MemoDto();//新增
         }

     }
     private void Cancel()
     {
         if (DialogHost.IsDialogOpen(DialogHostName)) //是否是打开
         {
             DialogHost.Close(DialogHostName,new DialogResult(ButtonResult.No)); //关闭
         }   
     }
     private void Save()
     {
         if (string.IsNullOrWhiteSpace(Model.Title) || string.IsNullOrWhiteSpace(Model.Content)) return; //校验数据是否为空
         if (DialogHost.IsDialogOpen(DialogHostName)) //是否是打开
         {
             DialogParameters pairs = new DialogParameters(); //定义返回参数
             pairs.Add("Value", Model);
             DialogHost.Close(DialogHostName,new DialogResult (ButtonResult.OK,pairs)); 
         }
     }

 }
  • 所有的ViewModel 逻辑处理类跟View 视图数据有绑定关系的,都要继承 BindableBase。用来实现通知绑定。

2.AddToDoViewModel 逻辑处理类,添加View视图数据要绑定的实体类 Model

public class AddToDoViewModel : BindableBase, IDialogHostAware
{
    public AddToDoViewModel()
    {
        CancelCommand = new DelegateCommand(Cancel);
        SaveCommand = new DelegateCommand(Save);
    }

    public string DialogHostName { get; set; }
    public DelegateCommand CancelCommand { get; set; }
    public DelegateCommand SaveCommand { get; set; }
    private ToDoDto model;
    //视图新增或编辑数据绑定实体类
    public ToDoDto Model
    {
        get { return model; }
        set { model = value; RaisePropertyChanged(); }
    }
    public void OnDialogOpend(IDialogParameters parameters)
    {
        //窗口打开的过程中,初始化数据
        if (parameters.ContainsKey("Value"))
        {
            Model = parameters.GetValue<ToDoDto>("Value");//编辑
        }
        else
        {
            Model = new ToDoDto();//新增
        }
    }
    private void Cancel()
    {
        if (DialogHost.IsDialogOpen(DialogHostName)) //是否是打开
        {
            DialogHost.Close(DialogHostName,new DialogResult(ButtonResult.No)); //关闭
        }
    }
    private void Save()
    {
        if (string.IsNullOrWhiteSpace(Model.Title) || string.IsNullOrWhiteSpace(Model.Content)) return; //校验数据是否为空
        if (DialogHost.IsDialogOpen(DialogHostName)) //是否是打开
        {
            DialogParameters pairs = new DialogParameters(); //定义返回参数
            pairs.Add("Value", Model);
            DialogHost.Close(DialogHostName, new DialogResult(ButtonResult.OK, pairs));
        }
    }

}

二.修改待办事项和备忘录视图,添加数据绑定

1.待办事项视图添加数据绑定

<UserControl x:Class="MyToDo.Views.Dialog.AddToDoView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:MyToDo.Views.Dialog"
              xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
             mc:Ignorable="d" 
             Width="450" Height="280">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <!--标题-->
        <TextBlock Text="添加待办" FontWeight="Bold" FontSize="20" Padding="20,10" />
        <!--中间内容部分-->
        <DockPanel Grid.Row="1" LastChildFill="False">
            <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="20,10">
                <TextBlock Text="状态:" VerticalAlignment="Center"/>
                <ComboBox SelectedIndex="{Binding Model.Status}" Margin="10,0,0,0">
                    <ComboBoxItem>待办</ComboBoxItem>
                    <ComboBoxItem>已完成</ComboBoxItem>
                </ComboBox>
            </StackPanel>

            <TextBox Margin="20,0" Text="{Binding Model.Title}" md:HintAssist.Hint="请输入待办概要" DockPanel.Dock="Top"/>
            <TextBox Margin="20,10" Text="{Binding Model.Content}" md:HintAssist.Hint="请输入待办内容" DockPanel.Dock="Top"
             TextWrapping="Wrap" AcceptsReturn="True" MinHeight="100" />
        </DockPanel>
        <!--底部按钮-->
        <StackPanel Grid.Row="2" Margin="10" Orientation="Horizontal" HorizontalAlignment="Right">
            <Button Content="取消" Margin="0,0,10,0" Style="{StaticResource MaterialDesignOutlinedButton}"
                    Command="{Binding CancelCommand}"/>
            <Button Content="确认" Command="{Binding SaveCommand}"/>
        </StackPanel>
    </Grid>
</UserControl>

2.备忘录视图添加数据绑定

<UserControl x:Class="MyToDo.Views.Dialog.AddMemoView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:MyToDo.Views.Dialog"
             xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
             mc:Ignorable="d" 
             Width="450" Height="280">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
         <!--标题-->
        <TextBlock Text="添加备忘录" FontWeight="Bold" FontSize="20" Padding="20,10" />
        <!--中间内容部分-->
        <DockPanel Grid.Row="1" LastChildFill="False">

            <TextBox Margin="20,0" Text="{Binding Model.Title}" md:HintAssist.Hint="请输入备忘录概要" DockPanel.Dock="Top"/>
            <TextBox Margin="20,10" Text="{Binding Model.Content}" md:HintAssist.Hint="请输入备忘录内容" DockPanel.Dock="Top"
                     TextWrapping="Wrap" AcceptsReturn="True" MinHeight="100" />
        </DockPanel>
        <!--底部按钮-->
        <StackPanel Grid.Row="2" Margin="10" Orientation="Horizontal" HorizontalAlignment="Right">
            <Button Content="取消" Margin="0,0,10,0" Style="{StaticResource MaterialDesignOutlinedButton}"
                    Command="{Binding CancelCommand}"/>
            <Button Content="确认" Command="{Binding SaveCommand}"/>
        </StackPanel>
    </Grid>
</UserControl>

三.修改IndexViewModel 逻辑处理类,为待办事项和备忘录添加逻辑处理:新增操作

1.首先要在构造函数中取到待办事项和备忘录接口服务实例

2.点击按钮弹窗进行添加数据时,待办事项和备忘录处理逻辑

3.完整的代码示例

 public class IndexViewModel:NavigationViewModel
 {
     private readonly IToDoService toDoService;
     private readonly IMemoService memoService;
     public IndexViewModel(IDialogHostService dialogService,IContainerProvider provider):base(provider)
     {
         TaskBars=new ObservableCollection<TaskBar>();
         ToDoDtos = new ObservableCollection<ToDoDto>();
         MemoDtos = new ObservableCollection<MemoDto>();
         ExecuteCommand = new DelegateCommand<string>(Execute);
         CreateTaskBars();
         this.toDoService = provider.Resolve<IToDoService>();//取到待办事项接口服务实例
         this.memoService = provider.Resolve<IMemoService>();
         this.dialogService = dialogService;
     }

     public DelegateCommand<string> ExecuteCommand { get; private set; }
         
     private ObservableCollection<TaskBar> taskBars;

     public ObservableCollection<TaskBar> TaskBars
     {
         get { return taskBars; }
         set { taskBars = value; RaisePropertyChanged(); }
     }
     private ObservableCollection<ToDoDto> toDoDtos;

     public ObservableCollection<ToDoDto> ToDoDtos
     {
         get { return toDoDtos; }
         set { toDoDtos = value; RaisePropertyChanged(); }
     }
     private ObservableCollection<MemoDto> memoDtos;
     private readonly IDialogHostService dialogService;

     public ObservableCollection<MemoDto> MemoDtos
     {
         get { return memoDtos; }
         set { memoDtos = value; RaisePropertyChanged(); }
     }
     void CreateTaskBars()
     {
         TaskBars.Add(new TaskBar() { Icon="ClockFast",Title="汇总",Content="9",Color="#FF0CA0FF",Target=""});
         TaskBars.Add(new TaskBar() { Icon = "ClockCheckOutline", Title = "已完成", Content = "9", Color = "#FF1ECA3A", Target = "" });
         TaskBars.Add(new TaskBar() { Icon = "ChartLineVariant", Title = "完成比例", Content = "9%", Color = "#FF02C6DC", Target = "" });
         TaskBars.Add(new TaskBar() { Icon = "PlaylistStar", Title = "备忘录", Content = "18", Color = "#FFFFA000", Target = "" });
     }
     async void GetDataAsync()
     {
         //加载备忘录数据
         var memoResult = await memoService.GetAllAsync(new Shared.Parameters.QueryParameter()
         {
             PageIndex = 0,
             PageSize = 100
         });
         if (memoResult.Status)
         {
             MemoDtos.Clear();
             foreach (var item in memoResult.Result.Items)
             {
                 MemoDtos.Add(item);
             }
         }
         //加载待办事项数据
         var todoResult = await toDoService.GetAllAsync(new Shared.Parameters.QueryParameter()
         {
             PageIndex = 0,
             PageSize = 100
         });
         if (todoResult.Status)
         {
             ToDoDtos.Clear();
             foreach (var item in todoResult.Result.Items)
             {
                 ToDoDtos.Add(item);
             }
         }
     }
     public override void OnNavigatedTo(NavigationContext navigationContext)
     {
         base.OnNavigatedTo(navigationContext);
         GetDataAsync();
     }
     private async void Execute(string obj)
     {
        switch(obj)
         {
             case "新增备忘录":
                var dialogMemoResult=await dialogService.ShowDialog("AddMemoView",null, "RootDialog");
                 if (dialogMemoResult.Result == ButtonResult.OK)
                 {
                     UpdateLoading(true);
                     var memo= dialogMemoResult.Parameters.GetValue<MemoDto>("Value");//获取到弹窗传过来的值
                     if (memo.Id > 0)//编辑
                     {

                     }
                     else
                     {
                         //新增
                        var addResult=  await memoService.AddAsync(memo);
                         if (addResult.Status)
                         {
                             MemoDtos.Add(addResult.Result);//添加到界面的集合中
                         }
                     }
                     UpdateLoading(false);
                 }
                 break;
             case "新增待办事项":
                 var dialogToDoResult =await dialogService.ShowDialog("AddToDoView",null, "RootDialog");
                 if(dialogToDoResult.Result == ButtonResult.OK)
                 {
                     UpdateLoading(true);
                     var todo = dialogToDoResult.Parameters.GetValue<ToDoDto>("Value");//获取到弹窗传过来的值
                     if (todo.Id > 0)//编辑
                     {

                     }
                     else
                     {
                         //新增
                         var addResult = await toDoService.AddAsync(todo);
                         if (addResult.Status)
                         {
                             ToDoDtos.Add(addResult.Result);//添加到界面的集合中
                         }
                     }
                     UpdateLoading(false);
                 }
                 break;
         }
     }
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1698646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于信号分解方法的机械故障诊断方法存在的问题

一方面&#xff0c;由于结构共振、测试噪声的干扰&#xff0c;为了确保分解精度&#xff0c;需要给定准确的参数初值(例如&#xff0c;瞬时频率)。研究人员通常认为零部件特征频率与通过传动比和驱动转速计算的理论值基本吻合&#xff0c;并基于理论值设置参数初值。事实上&…

matlab使用教程(78)—控制颜色图范围

1.控制颜色图范围 对于您创建的许多类型的可视化图形&#xff0c;MATLAB 默认将完整的数据范围映射到颜色图上。数据中的最小值映射到颜色图中的第一行&#xff0c;最大值映射到颜色图中的最后一行。所有中间值线性映射到颜色图的中间行。 这种默认映射适用于大部分情况&#x…

网络安全从入门到精通(特别篇I):应急响应之不同平台后门排查思路

Windows-后门-常规&权限维持&内存马 Linux-后门-常规&权限维持&Rootkit&内存马 Windows实验 1、常规MSF后门-分析检测 2、权限维持后门-分析检测 3、Web程序内存马-分析检测 常见工具集合: https://mp.weixin.qq.com/s/L3Lv06bFdUX_ZE4rS69aDg 常规…

【知识拓展】LocalTunnel-高性价比的内网穿透工具(2)

前言 上一篇通过ngrok进行内网穿透&#xff0c;有几个问题&#xff1a; ①需要注册&#xff0c;而且注册需要科学上网&#xff0c;相对麻烦 ②安装配置相对麻烦&#xff0c;authtoekn有限制 上述相对&#xff0c;指的是在非生产环境中做一个简单内网穿透&#xff0c;相对于…

京东应届生公司内网说了一句‘什么时候被pdd收购‘,结果惨遭辞退

京东应届生公司内网说了一句’什么时候被pdd收购’&#xff0c;结果惨遭公司开除 这个事最近在圈子讨论比较多 前二天&#xff0c;有一个上海交大毕业的应届生&#xff0c;在京东实习了9个月&#xff0c;好不容易转正12天后&#xff0c;只因在内网说了一句话&#xff0c;就被…

为什么本科毕业后我坚定地选择了就业而不是考研?

大家好&#xff0c;我是小布丁。今天来聊聊我为什么本科毕业后选择了就业而不是考研。 在整个大学期间&#xff0c;我被亲戚拷问最多的问题就是&#xff1a;准备考研吗&#xff1f;相信很多大学生都遇到过这种情况吧。 如果你说准备还好&#xff0c;亲戚大概率就不会问下去&a…

wetool企业版使用教程及下载方式 微兔该如何使用 wetool还能用吗 wetool扳手工具wetool操作方法难吗 wetool有哪些功能

今天给大家推荐一款我们目前在使用的电脑群发工具掘金小蜜&#xff0c;不仅可以无限多开&#xff0c;方便你同时管理多个账号&#xff0c;群发功能更是十分强大&#xff0c;轻松释放你的双手。 掘金小蜜&#xff08;只支持Win7及以上操作系统&#xff0c;没有推Mac版和手机客户…

蜗牛星际无法用ventoy安装FreeBSD14.1

ventoy 是一个非常棒的开源工具&#xff0c;可以制作usb启动盘&#xff0c;而且可以制作多系统启动盘&#xff0c;只要把iso文件放到ventoy盘的根目录就可以了。 一台蜗牛星际的老机器&#xff0c;把mini ssd盘从16G 升级到32G&#xff0c;用ventoy安装FreeBSD的时候失败&…

【题目】2023年全国职业院校技能大赛 GZ073 网络系统管理赛项赛题第4套B模块

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 赛题第4套 模块B&#xff1a;服务部署 Windows初始化环境 **&#xff08;一&#xff09;默认账号及默认密码** ----------------------------Username: AdministratorPassword: ChinaSkill23!Username: demoPassword: Chi…

【深度学习基础】NumPy数组库的使用

目录 写在开头 一、数组的类型与维度 数组的类型 数组的维度 二、数组的创建 递增数组 同值数组 随机数数组 三、数组的索引 访问/修改单个元素 花式索引 数组的切片 四、数组的变形 数组的转置 数组的翻转 数组的形状改变 数组的拼接 五、数组的运算 数…

心电信号处理算法(包括基线漂移消除技术,高通、低通和陷波滤波,等值线校正和QRS等波群标记等,MATLAB代码)

由于心电信号是心脏活动产生的电位差变化并在人体皮肤表面采集得到的微弱信号&#xff0c;频率大致为0.05Hz~100Hz&#xff0c;波形幅值在10μV~5mV内。与其他生理信号不同之处是&#xff0c;心电信号的频率较低且波形幅值小&#xff0c;在采集时容易被各种噪声干扰。心电信号由…

HTML橙色爱心

目录 写在前面 准备开始 完整代码 运行结果 系列文章 写在后面 写在前面 本期小编给大家分享一颗热烈且浪漫的爱心&#xff0c;快来看看吧&#xff01; 准备开始 在开始之前&#xff0c;我们需要先简单的了解一下这颗爱心的原理哦~ 本期将用html实现这颗跳动的爱心&a…

5.26机器人基础-空间描述和变换-总结

非目录 方便我找 重点 逆解 位姿矩阵的几何意义 实际坐标需要除以比例因子才能得到 比例因子的好处&#xff1a;在计算机的储存更加简单方便&#xff0c;例如x,y,x原先很大时&#xff0c;等比例改变 位姿坐标的齐次变换&#xff1a;左乘齐次坐标 从端点到末端&#xff0c…

rtthread 堆空间申请

#define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) //定义堆开始的地址 程序仿真查看 begin_align rw_size; 堆开始地址 最大栈地址 堆的结束地址 ram1最大地址&#xff0c;128kbytes 处。 上述就是rtthread 申请的堆空间大小。

民国漫画杂志《时代漫画》第25期.PDF

时代漫画25.PDF: https://url03.ctfile.com/f/1779803-1248635084-fd4794?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

【数据结构(邓俊辉)学习笔记】图01——图的表示与实现

文章目录 1. 概述1.1 邻接 关联1.2 无向 有向1.3 路径 环路 2. 邻接矩阵2.1 接口2.2 邻接矩阵 关联矩阵2.3 实例2.4 顶点和边2.5 邻接矩阵2.6 顶点静态操作2.7 边操作2.7 顶点动态操作2.8 综合评价 1. 概述 1.1 邻接 关联 相对于此前的线性以及半线性结构&#xff0c;图…

【Python】 XGBoost模型的使用案例及原理解析

原谅把你带走的雨天 在渐渐模糊的窗前 每个人最后都要说再见 原谅被你带走的永远 微笑着容易过一天 也许是我已经 老了一点 那些日子你会不会舍不得 思念就像关不紧的门 空气里有幸福的灰尘 否则为何闭上眼睛的时候 又全都想起了 谁都别说 让我一个人躲一躲 你的承诺 我竟然没怀…

内存函数详解,包含部分字符串函数

目录 一&#xff0c;memcpy内存函数的介绍 二memmove函数的介绍 三&#xff0c;memset的函数使用 四&#xff0c;memcmp的介绍 五&#xff0c;内存函数的模拟实现&#xff0c;以及一个字符串函数strstr的模拟实现 5.1memcpy函数的实现 5.2memmove的模拟实现 5.3memcmp的模拟…

19 QinQ技术(Vlan两层封装)

1 什么是QinQ&#xff1f; QinQ&#xff08;802.1Q-in-802.1Q&#xff09;&#xff0c;也叫做VLAN Stacking或Double VLAN&#xff0c;由IEEE 802.1ad标准定义&#xff0c;**是一项扩展VLAN空间的技术&#xff0c;**通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩…

Stream流常用操作

一、中间操作 中间操作是返回一个新的流&#xff0c;并在返回的流中包含所有之前的操作结果。它们总是延迟计算&#xff0c;这意味着它们只会在终止操作时执行&#xff0c;这样可以最大限度地优化资源使用。 1. filter(过滤) filter()方法接受一个谓词&#xff08;一个返回boo…