首页 > 其他分享 >WPF开发中遇到的新知识 -- 9

WPF开发中遇到的新知识 -- 9

时间:2022-09-25 11:35:44浏览次数:45  
标签:对话框 -- 知识 视图 获取数据 var new WPF 加载

加载页面

目的:在打开某个视图的时候,可能需要获取数据,而获取数据的时间一般会慢一点,所以应该提供一些反馈给用户,表示这个视图正在加载,而不是已经加载完成没有数据,重点是需要反馈,让用户知道软件正在运作

方法:在加载数据的开始,弹出对话框,这个对话框就是一个 ProgressBar ,然后开始加载数据,加载数据完成之后,通过事件聚合器发布消息,指出数据已经加载完成,而我们的对话框需要在构建时就注册了这个事件的回调,用来关闭对话框

对话框视图:

<UserControl x:Class="KrDesktop.Views.Dialogs.LoadingDialog"
             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:prism="http://prismlibrary.com/"
             mc:Ignorable="d" 
             Height="50" Width="100">
    <prism:Dialog.WindowStyle>
        <Style TargetType="Window">
            <Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
            <Setter Property="ResizeMode" Value="NoResize"/>
            <Setter Property="ShowInTaskbar" Value="False"/>
            <Setter Property="SizeToContent" Value="WidthAndHeight"/>
            <Setter Property="WindowStyle" Value="None" />
        </Style>
    </prism:Dialog.WindowStyle>

    <Grid>
        <ProgressBar IsIndeterminate="True" Orientation="Horizontal"/>
    </Grid>
</UserControl>

对话框ViewModle:

public LoadingDialogViewModel(IEventAggregator eventAggregator)
{
    eventAggregator.GetEvent<LoadingEvent>().Subscribe(isClose =>
    {
        if (isClose)
        {
            RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
        }
    });
}

需要加载数据的视图的ViewModel:

async void LoadData()
{
    _dialogService.Show("LoadingDialog");

    var dtos = await Task.Run(async () =>
    {
        return (await _httpClientFactory.GetAllActionRule())?.Data?
            .GroupBy(a => a.RuleId,
                (key, list) =>
                {
                    var first = list.First();
                    var remark = first.Remark;
                    var ruleId = first.RuleId;
                    var ruleDto = new ActionRuleDto { Id = ruleId, Name = remark };
                    ruleDto.ActionRules = list.Select(a => new ActionRule()
                    {
                        Index = a.SIndex ?? 0,
                        ActionArgs = a.Action,
                        Line = new LineModel
                        {
                            LineId = a.LineId,
                            StartPoint = a.StartPoint,
                            EndPoint = a.EndPoint
                        }
                    }).ToList();
                    return ruleDto;
                }).ToList();
    });

    DataList.Clear();
    DataList.AddRange(dtos);
    _eventAggregator.GetEvent<LoadingEvent>().Publish(true);
}

需要注意的是,对话框的弹出,需要是Show方法,而不是ShowDialog,因为ShowDialog方法会导致UI跳到新的对话框中,而不会继续执行ShowDialog后面的代码,也就会导致一直显示加载中,但是数据根本不会获取,因为根本就没执行获取数据的代码

不过实际开发上,感觉每次都需要这样做的话,会有模板代码在,如果在后端中会使用AOP来解决这种问题,不过没试过在WPF中应用AOP,下次试试

标签:对话框,--,知识,视图,获取数据,var,new,WPF,加载
From: https://www.cnblogs.com/huangwenhao1024/p/16727492.html

相关文章

  • 驱动开发:内核CR3切换读写内存
    首先CR3是什么,CR3是一个寄存器,该寄存器内保存有页目录表物理地址(PDBR地址),其实CR3内部存放的就是页目录表的内存基地址,运用CR3切换可实现对特定进程内存地址的强制读写操......
  • Github能够访问但是不能clone文件
    最近换了个地方,先是访问不了github,我意思到我这个地方区域网是无法访问的,后面修改DNS,还是不行,最后浏览器配置能够访问了。然后坑爹地方又出来了,项目不能clone,说什么clon......
  • 在递增的链表中删除min到max之间的所有元素
    在递增的链表中删除min到max之间的所有元素存在一个递增的链表,其中相邻两个结点的数据域的值要么相等,要么就是后面的大于前面的,对该表进行删除值属于(min,max)包括min和m......
  • 【code基础】set在去重中的作用
    一般set用于去重的判断,类似的还有HashMap以下是常见的解题思路:新建setnewHashSet<Integer>()对要判断的数组进行遍历,如果添加失败if(!set.add(x)),说明已存在该元......
  • Python安装PIL报错:No module named 'PIL'的解决方法
    在Python中,如果import了PIL,但是本机上并没有安装相应的组件,在运行py程序时会报错:ModuleNotFoundError:Nomodulenamed'PIL'。D:\Python\PY>MYPYAPP.pyTraceback(mos......
  • docker搭建私有仓库
    运行registry镜像安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境:查看官方文档:https://hub.docker.com/_/registry注意:当前机器是cen......
  • 20220925一周总结
    markdown主要语法介绍:1.大标题:功能快捷键标题ctrl+1或用#号表示,#一级标题,##表示二级标题,依次类推,快捷键ctrl+1、2、3、4、5、6最多6级标题。2.小标题(或者叫列表):M......
  • 按键精灵语法
      http://zy.anjian.com/?action-model-name-qmdn-itemid-248KeyPress按键http://zy.anjian.com/?action-model-name-qmdn-itemid-249KeyDown按住http://zy.anjia......
  • 实验3:OpenFlow协议分析实践
    实验3:OpenFlow协议分析实践实验目的能够运用wireshark对OpenFlow协议数据交互过程进行抓包;能够借助包解析工具,分析与解释OpenFlow协议的数据包交互过程与机制。......
  • 报告分享|2022年中国人力资源数字化研究报告
     报告链接:http://tecdat.cn/?p=28641受数字经济,疫情常态化、人口老龄化等社会因素,以及云计算等技术因素驱动影响,企业越来越注重人力资源数字化管理,力求盘活人力资源管理......