码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(12) -- 使用代码生成工具Database2Sharp生成WPF界面代码


    在经过基于SqlSugar框架的WPF应用端系统界面及模块的不断优化和重构后,视图界面及视图模型等代码已趋稳定,因此完成前面的介绍后,现在开始统一基于代码生成工具Database2Sharp进行WPF应用端界面代码的快速生成了,代码除了和WPF应用端的基类保持一致处理外,并添加一些注释代码,整合使用一些自定义的控件,以便更好的展示和简化代码处理。本篇随笔介绍使用代码生成工具Database2Sharp生成WPF界面代码。

    1、代码生成工具Database2Sharp生成WPF界面代码

    WPF应用端的基础接口,和Winform端、Vue3+ElementPlus前端一样,都是调用SqlSugar开发框架中的相关业务接口,如果对我们的SqlSugar框架还有疑问,可以参考我的随笔集《SqlSugar开发框架》进行系列的学习或了解。

    要了解项目的快速生成,需要从我们官网下载《代码生成工具Database2Sharp》工具后进行使用,该工具支持多种框架的项目开发,我们这里以SqlSugar开发框架中的【SqlSugar框架WPF界面生成】的项目生成为例介绍。

    我们首先需要使用PowerDesigner或者同类工具进行表的建模,如下所示。

    创建好相关的客户信息表后,先展开数据库列表,并从数据库列表右键选择对应的【SqlSugar框架WPF界面生成】或者在工具栏中快速选择操作,如下界面所示。

    或者从工具栏中选择对应的功能入口。

    在弹出的对话框中选择对应的表进行框架代码和【WPF界面生成】,从数据库列表中选择表进行测试生成,如下界面所示。

    我们可以从上面的列表中,定义查询条件、列表显示的内容,以及编辑界面所需要编辑显示的内容等信息。然后一键生成即可生成相应的WPF应用端的视图模型,以及视图界面和后台代码。

    我们以简单的T_Customer表为例,展示生成的界面代码,生成后,会在目录中创建ViewModels和Views/Pages目录,其中包含视图模型和视图界面代码及后台代码。

    视图模型包含列表的视图模型和编辑界面的视图模型,如下两个文件所示。

    列表视图的模型代码如下所示(包含一些例子代码)。

    复制代码
    /// 
    /// 客户信息 列表-视图模型对象
    /// 
    public partial class CustomerListViewModel : BaseListViewModelstring, CustomerPagedDto>
    {
        /// 
        /// 树列表的模型
        /// 
        [ObservableProperty]
        private TreeViewModel treeModel = new();
    
        /// 
        /// 构造函数
        /// 
        /// 业务服务接口
        public CustomerListViewModel(ICustomerService service) : base(service)
        {
            //设置导出的字段列表
            this.ExportFields = "Name,Age,Creator,CreateTime";
        }
    
        /// 
        /// 触发处理命令,处理树列表
        /// 
        [RelayCommand]
        private async Task GetTree()
        {
            //下面代码仅为示例,具体根据实际情况处理
            /*
            //获取嵌套列表
            var allNode = await BLLFactory.Instance.GetTree(App.ViewModel.SystemType);
            //根据列表递归删除对应节点列表
            var treeeNodeList = AddRecursive(allNode);
    
            this.TreeModel.TreeItems = treeeNodeList;
            this.TreeModel.FilteredTreeItems = new List(treeeNodeList);
    
            //提示更新界面控件数据源
            this.NotifyChanged(nameof(this.TreeModel));
            */
        }
    
        /// 
        /// 嵌套添加列表
        /// 
        /// 嵌套集合列表
        /// 父节点,可为空
        /// 
        private List AddRecursive(List children, CustomTreeNode parentNode = null)
        {
            var treeeNodeList = new List();
            foreach (var info in children)
            {
                var node = new CustomTreeNode
                {
                    Name = info.Name,
                    Id = info.Id
                };
                AddRecursive(info.Children, node);
    
                treeeNodeList.Add(node);
            }
    
            if (parentNode != null)
            {
                parentNode.Children = treeeNodeList;
                return new List() { parentNode };
            }
            else
            {
                return treeeNodeList;
            }
        }
    }
    复制代码

    编辑界面的视图模型代码如下所示。

    复制代码
        /// 
        /// 客户信息 新增、编辑-视图模型
        /// 
        public partial class CustomerEditViewModel : BaseEditViewModelstring, CustomerPagedDto>
        {
            /// 
            /// 构造函数
            /// 
            /// 服务接口对象
            public CustomerEditViewModel(ICustomerService service) : base(service)
            {
                this.Title = "客户信息";
            }
    
            /// 
            /// 刷新记录相关的信息
            /// 
            /// 
            public async Task InitData(string id)
            {
                //实现代码
    
                //所辖公司
                //if(!this.Item.Company_ID.IsNullOrEmpty())
                //{
                //    this.SelectedCompanyItem = this.CompanyItems.First(s => s.Id.ToString() == this.Item.Company_ID);
                //}
            }
        }
    复制代码

    由于继承了相关的基类信息,我们基本上有这些操作就可以完成常规的CRUD以及树形列表的展示处理了,如果需要更多的操作,可以扩展相关的代码,同样界面代码和界面后台代码配套,统一生成相关的查询、列表、分页、导入导入、编辑显示等处理效果。生成的列表界面、编辑界面及其对应的界面后端代码,一共四个文件即可。

     由于代码不少,就不再一一展示。

    调整界面的高度和宽度基本上就可以了。

    常规的列表界面,包含查询、列表展示、分页(超过一页则显示)、导入导出、删除、编辑查看等相关功能了。

    对比Winform的生成界面效果,也是很类似的。

    WPF应用端中,编辑和新建界面统一,双击列表或者单击按钮【编辑】【新增】弹出模态对话框界面,如下界面所示。

    以上就是最简单的表的界面生成,其他界面,可能会包含一些下拉列表,特殊输入等,我们根据前面随笔介绍的自定义控件操作,增加一些特殊的输入或者显示即可。

    这些代码我们会注释在生成的界面代码上,供参考使用。

    复制代码
    
    
    复制代码

     

    2、合并界面代码并添加菜单到系统中使用

    上面我们介绍生成的界面代码,整合到项目后的具体效果,我们看看如何整合到已有的WPF应用端项目上。

    前面生成的文件(包括视图模型和视图界面代码),和你项目的命名空间保持一致,然后复制到项目上进行增量式的合并即可。

    合并的具体位置根据实际情况放置即可,如视图模型放到视图模型的大目录上,界面代码放到视图目录上即可,如下界面所示。

    编译上面的合并代码,如果顺利编译后,我们还需要添加相应的系统功能菜单到系统上,才能进行分配使用。

    其中WPF窗体类型,就是我们窗体的命名空间+列表界面类名称,如:WHC.SugarProject.WpfUI.Views.Pages.CustomerListPage。

    分配完成后,系统用户重新登录,就可以看到相应增加的菜单功能入口了,单击菜单就可以打开Page列表页面,如果需要新增,则会弹出对话框进行输入。

    如果是需要直接编辑DataGrid表格的数据的操作,可以参考随笔《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(10) -- 在DataGrid上直接编辑保存数据》。

    我们通过这样通过一个简单的表的信息,演示了如何使用代码生成工具Database2Sharp生成WPF界面代码,并整合到WPF应用端项目上进行使用,实现菜单的动态化访问。 

     系列随笔如下连接:

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(12) -- 使用代码生成工具Database2Sharp生成WPF界面代码 》

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件》

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(10) -- 在DataGrid上直接编辑保存数据》

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(9) -- 实现系统动态菜单的配置和权限分配》

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(8) -- 使用Converter类实现内容的转义处理》

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(7) -- 图标列表展示和选择处理 》

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(6) -- 窗口控件脏数据状态IsDirty的跟踪处理 》

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(5) -- 树列表TreeView的使用 》

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(4) -- 实现DataGrid数据的导入和导出操作》

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(3)--自定义用户控件》

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(2) 》

    《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1) 》

    SqlSuagar框架相关介绍随笔:《SqlSugar开发框架》

  • 相关阅读:
    【面试普通人VS高手】Kafka的零拷贝原理?
    高效、易用、可拓展我全都要:OneFlow CUDA Elementwise模板库的设计优化思路
    【已解决】Python读取sql数据,报错:Not an executable object,解决方案
    供应 JOSEF约瑟 跳位合位监视继电器 JZ-7GJ-S002XMC AC220V
    2023年湖北省专利导航、知识产权软科学研究及服务政策(申报条件、材料、时间)
    ubuntu在线服务器python Package安装到离线服务器
    【教程】 iOS混淆加固原理篇
    闭包、IIFE立即执行函数
    HackTheBox MetaTwo 网站框架CVE获取用户shell和破解私钥提权
    MyBatis基础
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/17782015.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号