精华内容
下载资源
问答
  • 一个新学WPF的IT老鸟,肝了2个月做了这么一个WPF企业级开发框架,站长clone学习,觉得甚是不错。这是一个使用了Prism搭建的插件式框架,封装了DataGrid的使用,使整个框架子模块简单易学、易扩展,特别是作者还写了...

    d1af380ca08578ecd593f8bac91ea9d9.png

    一个新学WPF的IT老鸟,肝了2个月做了这么一个WPF企业级开发框架,站长clone学习,觉得甚是不错。这是一个使用了Prism搭建的插件式框架,封装了DataGrid的使用,使整个框架子模块简单易学、易扩展,特别是作者还写了一个系列博客教程,值得点赞。


    下面是作者博文系列首篇:WPF企业级开发框架搭建指南(启示录),2020从入门到放弃


    这个系列的文章旨在记录工作中使用WPF开发新的医疗项目中,有感于必须统一掉一些规范上的事情,并且提高团队开发效率,遂折腾了这么一个半吊子的框架,这个标题WPF企业级开发框架搭建指南,2020从入门到放弃可能会唬住一些人,但看到这些零碎文字的朋友就凑和着看吧,如果能帮助到你,那也荣幸了。

    WPF技术是一个很不错的技术,但一直没有上手过正式的项目,趁在做这个医疗项目时,遂搭建一个WPF开发框架,目的是为了统一WPF开发并提高开发效率;我对WPF技术算是零基础,现学现卖,用这些不成体系的文字予以记录一些想法和实践。

    文章目录

    WPF企业级开发框架搭建系列文章导航


    1. WPF企业级开发框架搭建指南(启示录)
    2. JHRS开发框架之基础类库
    3. JHRS开发框架之第三方框架选型
    4. JHRS开发框架之WPF调用Web API封装
    5. JHRS开发框架之客户端入口项目
    6. JHRS开发框架之各子系统如何整合
    7. JHRS开发框架之怎样设计合理的ViewModel基类
    8. JHRS开发框架之公用组件用户控件的封装
    9. JHRS开发框架之建议遵循的一些建目录文件原则
    10. JHRS开发框架之WPF数据验证
    11. JHRS开发框架之ViewModel相互传参和弹框回传参的解决办法
    12. JHRS开发框架之踩坑记(终章)

    WPF管理系统开发框架设计图


    在正式开始WPF开发框架搭建之前,做了一些技术选型和在群里面咨询了下对WPF技术比较了解的群友,当中就属dotnet9.com的站长经常被笔者叨扰。先来说说我期望中的开发框架要实现哪些功能。

    在开始搭建之前呢,还是晾一下最终的架构图吧。

    9de1615aa40b9b19c8d54c5ae56964cc.png

    上图就是折腾出来的一个框架,图不美观的话,大伙也就凑合着看吧。下图是解决方案:

    f3271efc29693dae983ec92905269b62.png
    • 开源地址:https://github.com/jhrscom/jhrs
    • 官方博客:https://jhrs.com
    • 用到插件:https://marketplace.visualstudio.com/items?itemName=PeterSpa.XamlBinding

    开发环境


    因为项目是使用WPF来开发的,自然基于【MVVM】的理念搭建了这么一个快速开发框架,适用于开发【传统类型的管理系统】,并通过调用web api的方式来完成所有的业务操作,在WPF的Page,窗体(Window),用户控件的后置代码,几乎不会有任何的业务代码,除了一些控制界面行为的功能。

    在搭建这个框架时,是基于最新的 【 .net 5】用的技术版本是比较新的,演示代码中,wpf也是使用 .net 5。

    6e05c6a0989d457193e450bd236c81d6.png

    使用技术说明

    • 技术平台:.Net 5.0
    • 技术框架:WPF + Prism+ AspectInjector + Refit
    • IoC组件:Prism自带Prism.Unity
    • 数据序列化:Newtonsoft.Json,可替换
    • 日志记录:系统自带

    解决方案详解


    解决方案从上到下依次为:

    JHRS.Core(客户端业务核心)

    1e7d08dc866000b1b63453a029a679df.png

    在JHRS.Core这个库里面,各个目录功能说明如下:

    1. Aop:实现了一个点击按钮显示转圈圈效果的类,一般用于加载数据,点击按钮从服务器获取数据让用户等侯片刻。
    2. Apis:保存着代码生成工具【JHRS.GenerateAPI】自动生成的接口,该工具可以在线解析swagger生成供调用的接口,参见这里(使用该工具需要设置swagger地址,另外有bug的话,自己修改下就可以了)。
    3. Controls:定义了WPF界面使用的公用控件(保存在Controls目录),如通用表格(DataGrid),下拉框等,凡公用的控件,都可以保存在此目录。
    4. Enums:公用的枚举,各个模块可以引用。
    5. Events:事件类,Prism自带事件总线,相应的事件类在这个目录创建,具体应用参见这里。
    6. Extensions:扩展类
    7. Identity:身份认证,即登录系统后,从服务器端获取到的身份认证会话信息(用户,token等)。
    8. Models:各个模块的DTO对象,一般是根据swagger解析出各个接口的实体对象(输入,输出DTO)。
    9. Modules:模块的辅助类。
    10. ViewModels:这个目录里面定义了ViewModel的基类,处理各个功能Page业务的ViewModel类,需要从这里继承对应的类,如管理页面继承BaseManagePageViewModel,而新增编辑页面继承BaseDialogPageViewModel类等。并且在基类里面定义了公共方法,如消息提示框,消息弹框,打开模态窗口等,效果见下方所示。

    JHRS.Shell(WPF客户端入口程序)

    117151f58c25ef94551bedebe09becaa.png

    JHRS.Shell是WPF客户端项目的入口程序,并且定义了整个系统公用的消息提示框,模态窗口风格,主窗口等;登录的入口也是在这里定义的,登录系统后,可以自行实现权限功能加只加载对应的子模块(子系统);在程序启动时,会自动做一些初始化操作,扫描程序集自动注入相关功能,具体实现参见这里。

    消息提示框

    16ebd12e2d2451ff4b5c51b679ad8fe7.png

    消息弹框

    acbd7d716725f33eccd49e2d239f3138.png

    确认消息框

    cd7c8b1e489e6484accb9887ab7c4758.png

    模态窗口

    791467bba6a7ab8c067c434a0ab40b6d.png

    遮罩层效果(蒙层效果或Loading效果)

    遮罩层效果一般用于点击按钮,加载数据时使用,即调用接口到数据呈现中间有一个等待的过程,就可以显示出来,因此在框架中通过AOP方式封装了这么一个效果,调用时在相关的地方标记一个特性即可。先来看看效果。

    e43bad897689d557a7e0f55394d3a11c.png

    该效果是直接从CSDN抠过来的,然后整到到代码里面去的,纯演示目的。

    参考链接:https://blog.csdn.net/lhx527099095/article/details/8005095

    modules解决方案文件夹

    6440fe352e956297136528d608e56eb6.png

    在modules这个解决方案文件夹里面的是各个子模块,也就是各个子系统,例如【JHRS.OutpatientSystem】是WPF项目的子系统之一(门诊模块);在各子系统中,最外层拥有一个Module的类(OutpatientSystemModule),需要实现IModule接口供Prism自动扫描注册到容器里面。

    在子模块中,目录的组织原则如下。

    目录组织原则

    |----- JHRS.OutpatientSystem 命名规则:【JHRS】点【模块名称】
    |----- Controls 表示当前模块的控件库存放目录
    | |------- Manager 子目录
    | |------- SysManager 子目录
    | |--------其它子目录
    |------ Extensions 当前模块扩展类
    |------ Model 当前模块实体,如查询条件实体
    |------ ViewModels 【固定命名,不能改动】
    | |------ScheduManager 各管理功能目录
    | |--------XXXXViewModel.cs 每个功能页面的ViewModel类
    | |--------其它ViewModel.cs 其它页面的ViewModel
    |-------Views 【WPF页面,固定命名】
    | |------ ScheduManager 功能目录
    | |------XXXXXXX.xaml WPF页面
    | |------XXXXXXX.xaml WPF页面
    | |-------SysManager 功能目录
    |------- OutpatientSystemModule 命名:模块名称+Module

    在每一个子系统中,最外层的一个模块类,名称规则为:【模块名称+Module】,编写这个类是为了使用Prism加载这个模块。

    JHRS(基础类库)

    7faaa8a02bffa5fc83633d0dbac5486e.png

    基础类库,可以任意扩展,该库可以供其它所有库引用。

    JHRS.GenerateAPI(代码生成工具)

    该工具是在线解析swagger生成供Refit调用的接口,生成的接口如下:

    75ea844829467955f397bb1504a600f7.png

    调用接口的示例代码如下:

    var response = await RestService.For<ILoginApi>(baseUrl).Login(CurrentUser);if (!response.Succeeded){ Alert(response.Message); return;}

    最后


    对于WPF开发来说,我并不是很熟悉,这段时间以来一直网上学习和借鉴一些开源的框架,再结合实际项目而整出来的这个开发框架;可能对于从事WPF开发的朋友来说有一定的借鉴意义。

    完整的项目代码已经开源到github上面。在这个项目中,并不包含web api的项目。

    • 开源地址:https://github.com/jhrscom/jhrs
    • 官方博客:https://jhrs.com

    本文markdown原文分享:https://dotnet9.com/2020-09-07

    除非注明,文章均由 Dotnet9 整理发布,欢迎转载。
    转载请注明:
    作者:Dotnet9
    链接:https://dotnet9.com/16199.html
    来源:Dotnet9
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    07375e0284390fcce285b6682ab78009.png
    展开全文
  • JHRS一个新学WPF的IT老鸟,肝了2个月做了这么一个WPF企业级开发框架,站长clone学习,觉得甚是不错。这是一个使用了Prism搭建的插件式框架,封装了DataGrid的使用,使整个框架子模块简单易学、易扩展,特别是作者还...
    1172b3f3e358f6cc212ecb5e55778dc6.png
    JHRS

    一个新学WPF的IT老鸟,肝了2个月做了这么一个WPF企业级开发框架,站长clone学习,觉得甚是不错。这是一个使用了Prism搭建的插件式框架,封装了DataGrid的使用,使整个框架子模块简单易学、易扩展,特别是作者还写了一个系列博客教程,值得点赞。


    下面是作者博文系列首篇:WPF企业级开发框架搭建指南(启示录),2020从入门到放弃


    这个系列的文章旨在记录工作中使用WPF开发新的医疗项目中,有感于必须统一掉一些规范上的事情,并且提高团队开发效率,遂折腾了这么一个半吊子的框架,这个标题WPF企业级开发框架搭建指南,2020从入门到放弃可能会唬住一些人,但看到这些零碎文字的朋友就凑和着看吧,如果能帮助到你,那也荣幸了。

    WPF技术是一个很不错的技术,但一直没有上手过正式的项目,趁在做这个医疗项目时,遂搭建一个WPF开发框架,目的是为了统一WPF开发并提高开发效率;我对WPF技术算是零基础,现学现卖,用这些不成体系的文字予以记录一些想法和实践。

    WPF企业级开发框架搭建系列文章导航


    1. WPF企业级开发框架搭建指南(启示录)
    2. JHRS开发框架之基础类库
    3. JHRS开发框架之第三方框架选型
    4. JHRS开发框架之WPF调用Web API封装
    5. JHRS开发框架之客户端入口项目
    6. JHRS开发框架之各子系统如何整合
    7. JHRS开发框架之怎样设计合理的ViewModel基类
    8. JHRS开发框架之公用组件用户控件的封装
    9. JHRS开发框架之建议遵循的一些建目录文件原则
    10. JHRS开发框架之WPF数据验证
    11. JHRS开发框架之ViewModel相互传参和弹框回传参的解决办法
    12. JHRS开发框架之踩坑记(终章)

    WPF管理系统开发框架设计图


    在正式开始WPF开发框架搭建之前,做了一些技术选型和在群里面咨询了下对WPF技术比较了解的群友,当中就属dotnet9.com的站长经常被笔者叨扰。先来说说我期望中的开发框架要实现哪些功能。

    在开始搭建之前呢,还是晾一下最终的架构图吧。

    5d54e8cfa90e776d051876a7367f561d.png
    WPF基于WEB API开发管理系统框架

    上图就是折腾出来的一个框架,图不美观的话,大伙也就凑合着看吧。下图是解决方案:

    de5a6c5514e97c3777620d15e4d66b53.png
    框架解决方案
    • 开源地址:https://github.com/jhrscom/jhrs
    • 官方博客:https://jhrs.com
    • 用到插件:https://marketplace.visualstudio.com/items?itemName=PeterSpa.XamlBinding

    开发环境


    因为项目是使用WPF来开发的,自然基于【MVVM】的理念搭建了这么一个快速开发框架,适用于开发【传统类型的管理系统】,并通过调用web api的方式来完成所有的业务操作,在WPF的Page,窗体(Window),用户控件的后置代码,几乎不会有任何的业务代码,除了一些控制界面行为的功能

    在搭建这个框架时,是基于最新的 【 .net 5】用的技术版本是比较新的,演示代码中,wpf也是使用 .net 5

    5f0c1361e1a8faaa409c97a1edf538f7.png
    采用.NET 5开发

    使用技术说明

    • 技术平台:.Net 5.0
    • 技术框架:WPF + Prism+ AspectInjector + Refit
    • IoC组件:Prism自带Prism.Unity
    • 数据序列化:Newtonsoft.Json,可替换
    • 日志记录:系统自带

    解决方案详解


    解决方案从上到下依次为:

    JHRS.Core(客户端业务核心)

    35521b156c3c4d17821bdabb35e5c204.png
    客户端业务核心

    在JHRS.Core这个库里面,各个目录功能说明如下:

    1. Aop:实现了一个点击按钮显示转圈圈效果的类,一般用于加载数据,点击按钮从服务器获取数据让用户等侯片刻。
    2. Apis:保存着代码生成工具【JHRS.GenerateAPI】自动生成的接口,该工具可以在线解析swagger生成供调用的接口,参见这里(使用该工具需要设置swagger地址,另外有bug的话,自己修改下就可以了)。
    3. Controls:定义了WPF界面使用的公用控件(保存在Controls目录),如通用表格(DataGrid),下拉框等,凡公用的控件,都可以保存在此目录。
    4. Enums:公用的枚举,各个模块可以引用。
    5. Events:事件类,Prism自带事件总线,相应的事件类在这个目录创建,具体应用参见这里。
    6. Extensions:扩展类
    7. Identity:身份认证,即登录系统后,从服务器端获取到的身份认证会话信息(用户,token等)。
    8. Models:各个模块的DTO对象,一般是根据swagger解析出各个接口的实体对象(输入,输出DTO)。
    9. Modules:模块的辅助类。
    10. ViewModels:这个目录里面定义了ViewModel的基类,处理各个功能Page业务的ViewModel类,需要从这里继承对应的类,如管理页面继承BaseManagePageViewModel,而新增编辑页面继承BaseDialogPageViewModel类等。并且在基类里面定义了公共方法,如消息提示框,消息弹框,打开模态窗口等,效果见下方所示。

    JHRS.Shell(WPF客户端入口程序)

    3d05d5f4329ef3bd00574864d079791d.png
    WPF客户端入口程序

    JHRS.Shell是WPF客户端项目的入口程序,并且定义了整个系统公用的消息提示框,模态窗口风格,主窗口等;登录的入口也是在这里定义的,登录系统后,可以自行实现权限功能加只加载对应的子模块(子系统);在程序启动时,会自动做一些初始化操作,扫描程序集自动注入相关功能,具体实现参见这里。

    消息提示框

    db9c83c67dc40e23f000ba7aad5b9711.png
    消息提示框

    消息弹框

    3217a1be9f91be0524dffc08b84a852e.png
    消息弹框

    确认消息框

    3c2212e28a289e87a309d273d2d5198f.png
    确认消息框

    模态窗口

    241e1d50ec2453d625aaa60ed1c4be38.png
    模态窗口

    遮罩层效果(蒙层效果或Loading效果)

    遮罩层效果一般用于点击按钮,加载数据时使用,即调用接口到数据呈现中间有一个等待的过程,就可以显示出来,因此在框架中通过AOP方式封装了这么一个效果,调用时在相关的地方标记一个特性即可。先来看看效果。

    ddeb64ab12c7ede67e526a059717ce48.png
    遮罩层效果

    该效果是直接从CSDN抠过来的,然后整到到代码里面去的,纯演示目的。

    参考链接:https://blog.csdn.net/lhx527099095/article/details/8005095

    modules解决方案文件夹

    e2bc2ba4cac1c9f8918b71caef96cfd4.png
    modules解决方案文件夹

    在modules这个解决方案文件夹里面的是各个子模块,也就是各个子系统,例如【JHRS.OutpatientSystem】是WPF项目的子系统之一(门诊模块);在各子系统中,最外层拥有一个Module的类(OutpatientSystemModule),需要实现IModule接口供Prism自动扫描注册到容器里面。

    在子模块中,目录的组织原则如下。

    目录组织原则

    |----- JHRS.OutpatientSystem 命名规则:【JHRS】点【模块名称】|----- Controls 表示当前模块的控件库存放目录|     |------- Manager 子目录|     |------- SysManager 子目录|     |--------其它子目录|------ Extensions 当前模块扩展类|------ Model 当前模块实体,如查询条件实体|------ ViewModels 【固定命名,不能改动】|    |------ScheduManager 各管理功能目录|    |--------XXXXViewModel.cs 每个功能页面的ViewModel类|    |--------其它ViewModel.cs 其它页面的ViewModel|-------Views 【WPF页面,固定命名】|    |------ ScheduManager 功能目录|    |------XXXXXXX.xaml WPF页面|    |------XXXXXXX.xaml WPF页面|    |-------SysManager 功能目录|------- OutpatientSystemModule 命名:模块名称+Module

    在每一个子系统中,最外层的一个模块类,名称规则为:【模块名称+Module】,编写这个类是为了使用Prism加载这个模块。

    JHRS(基础类库)

    48cd0bda772d43853398822f6c466d1a.png
    JHRS(基础类库)

    基础类库,可以任意扩展,该库可以供其它所有库引用。

    JHRS.GenerateAPI(代码生成工具)

    该工具是在线解析swagger生成供Refit调用的接口,生成的接口如下:

    1fc041cbe171ad06053bd2119fcb37bb.png
    接口

    调用接口的示例代码如下:

    var response = await RestService.For(baseUrl).Login(CurrentUser);if (!response.Succeeded){         Alert(response.Message);         return;}

    最后


    对于WPF开发来说,我并不是很熟悉,这段时间以来一直网上学习和借鉴一些开源的框架,再结合实际项目而整出来的这个开发框架;可能对于从事WPF开发的朋友来说有一定的借鉴意义。

    完整的项目代码已经开源到github上面。在这个项目中,并不包含web api的项目。

    • 开源地址:https://github.com/jhrscom/jhrs
    • 官方博客:https://jhrs.com
    展开全文
  • 一个新学WPF的IT老鸟,肝了2个月做了这么一个WPF企业级开发框架,站长clone学习,觉得甚是不错。这是一个使用了Prism搭建的插件式框架,封装了DataGrid的使用,使整个框架子模块简单易学、易扩展,特别是作者还写了...
    5e0d9a11472473285d74bbb79ad171c9.png

    一个新学WPF的IT老鸟,肝了2个月做了这么一个WPF企业级开发框架,站长clone学习,觉得甚是不错。这是一个使用了Prism搭建的插件式框架,封装了DataGrid的使用,使整个框架子模块简单易学、易扩展,特别是作者还写了一个系列博客教程,值得点赞。


    下面是作者博文系列首篇:WPF企业级开发框架搭建指南(启示录),2020从入门到放弃


    这个系列的文章旨在记录工作中使用WPF开发新的医疗项目中,有感于必须统一掉一些规范上的事情,并且提高团队开发效率,遂折腾了这么一个半吊子的框架,这个标题WPF企业级开发框架搭建指南,2020从入门到放弃可能会唬住一些人,但看到这些零碎文字的朋友就凑合着看吧,如果能帮助到你,那也荣幸了。

    WPF技术是一个很不错的技术,但一直没有上手过正式的项目,趁在做这个医疗项目时,遂搭建一个WPF开发框架,目的是为了统一WPF开发并提高开发效率;我对WPF技术算是零基础,现学现卖,用这些不成体系的文字予以记录一些想法和实践。

    文章目录

    WPF企业级开发框架搭建系列文章导航


    1. WPF企业级开发框架搭建指南(启示录)
    2. JHRS开发框架之基础类库
    3. JHRS开发框架之第三方框架选型
    4. JHRS开发框架之WPF调用Web API封装
    5. JHRS开发框架之客户端入口项目
    6. JHRS开发框架之各子系统如何整合
    7. JHRS开发框架之怎样设计合理的ViewModel基类
    8. JHRS开发框架之公用组件用户控件的封装
    9. JHRS开发框架之建议遵循的一些建目录文件原则
    10. JHRS开发框架之WPF数据验证
    11. JHRS开发框架之ViewModel相互传参和弹框回传参的解决办法
    12. JHRS开发框架之踩坑记(终章)

    WPF管理系统开发框架设计图


    在正式开始WPF开发框架搭建之前,做了一些技术选型和在群里面咨询了下对WPF技术比较了解的群友,当中就属dotnet9.com的站长经常被笔者叨扰。先来说说我期望中的开发框架要实现哪些功能。

    在开始搭建之前呢,还是晾一下最终的架构图吧。

    8e61f9bd615167d381084dc0d3d3fc95.png

    上图就是折腾出来的一个框架,图不美观的话,大伙也就凑合着看吧。下图是解决方案:

    08ffe1b114c261a80798a11a09d74e4f.png

    开发环境


    因为项目是使用WPF来开发的,自然基于【MVVM】的理念搭建了这么一个快速开发框架,适用于开发【传统类型的管理系统】,并通过调用web api的方式来完成所有的业务操作,在WPF的Page,窗体(Window),用户控件的后置代码,几乎不会有任何的业务代码,除了一些控制界面行为的功能。

    在搭建这个框架时,是基于最新的 【 .net 5】用的技术版本是比较新的,演示代码中,wpf也是使用 .net 5。

    677b22349be7364eb3460d9669e89410.png

    使用技术说明

    • 技术平台:.Net 5.0
    • 技术框架:WPF + Prism+ AspectInjector + Refit
    • IoC组件:Prism自带Prism.Unity
    • 数据序列化:Newtonsoft.Json,可替换
    • 日志记录:系统自带

    解决方案详解


    解决方案从上到下依次为:

    JHRS.Core(客户端业务核心)

    4703a55765ff4b8aa1d38fbc83e4c62c.png

    在JHRS.Core这个库里面,各个目录功能说明如下:

    1. Aop:实现了一个点击按钮显示转圈圈效果的类,一般用于加载数据,点击按钮从服务器获取数据让用户等候片刻。
    2. Apis:保存着代码生成工具【JHRS.GenerateAPI】自动生成的接口,该工具可以在线解析swagger生成供调用的接口,参见这里(使用该工具需要设置swagger地址,另外有bug的话,自己修改下就可以了)。
    3. Controls:定义了WPF界面使用的公用控件(保存在Controls目录),如通用表格(DataGrid),下拉框等,凡公用的控件,都可以保存在此目录。
    4. Enums:公用的枚举,各个模块可以引用。
    5. Events:事件类,Prism自带事件总线,相应的事件类在这个目录创建,具体应用参见这里。
    6. Extensions:扩展类
    7. Identity:身份认证,即登录系统后,从服务器端获取到的身份认证会话信息(用户,token等)。
    8. Models:各个模块的DTO对象,一般是根据swagger解析出各个接口的实体对象(输入,输出DTO)。
    9. Modules:模块的辅助类。
    10. ViewModels:这个目录里面定义了ViewModel的基类,处理各个功能Page业务的ViewModel类,需要从这里继承对应的类,如管理页面继承BaseManagePageViewModel,而新增编辑页面继承BaseDialogPageViewModel类等。并且在基类里面定义了公共方法,如消息提示框,消息弹框,打开模态窗口等,效果见下方所示。

    JHRS.Shell(WPF客户端入口程序)

    2d382f9c7a1abed57c96b6e5f7c401f3.png

    JHRS.Shell是WPF客户端项目的入口程序,并且定义了整个系统公用的消息提示框,模态窗口风格,主窗口等;登录的入口也是在这里定义的,登录系统后,可以自行实现权限功能加只加载对应的子模块(子系统);在程序启动时,会自动做一些初始化操作,扫描程序集自动注入相关功能,具体实现参见这里。

    消息提示框

    2f13ab290f020e0a2842df5641785ee4.png

    消息弹框

    6b178da30cd5afd26ea6961b14753f43.png

    确认消息框

    cdf9167b2963bca818dda4a74cb1ed3d.png

    模态窗口

    bd292c0b81cb633ea2df501ab62121de.png

    遮罩层效果(蒙层效果或Loading效果)

    遮罩层效果一般用于点击按钮,加载数据时使用,即调用接口到数据呈现中间有一个等待的过程,就可以显示出来,因此在框架中通过AOP方式封装了这么一个效果,调用时在相关的地方标记一个特性即可。先来看看效果。

    ab98f5c7b999e3c10c516bceee5d7f98.png

    该效果是直接从CSDN抠过来的,然后整到到代码里面去的,纯演示目的。

    参考链接:https://blog.csdn.net/lhx527099095/article/details/8005095

    modules解决方案文件夹

    714a6f8319c92e72c27338676e9cff6a.png

    在modules这个解决方案文件夹里面的是各个子模块,也就是各个子系统,例如【JHRS.OutpatientSystem】是WPF项目的子系统之一(门诊模块);在各子系统中,最外层拥有一个Module的类(OutpatientSystemModule),需要实现IModule接口供Prism自动扫描注册到容器里面。

    在子模块中,目录的组织原则如下。

    目录组织原则

    |----- JHRS.OutpatientSystem 命名规则:【JHRS】点【模块名称】

    |----- Controls 表示当前模块的控件库存放目录

    | |------- Manager 子目录

    | |------- SysManager 子目录

    | |--------其它子目录

    |------ Extensions 当前模块扩展类

    |------ Model 当前模块实体,如查询条件实体

    |------ ViewModels 【固定命名,不能改动】

    | |------ScheduManager 各管理功能目录

    | |--------XXXXViewModel.cs 每个功能页面的ViewModel类

    | |--------其它ViewModel.cs 其它页面的ViewModel

    |-------Views 【WPF页面,固定命名】

    | |------ ScheduManager 功能目录

    | |------XXXXXXX.xaml WPF页面

    | |------XXXXXXX.xaml WPF页面

    | |-------SysManager 功能目录

    |------- OutpatientSystemModule 命名:模块名称+Module

    在每一个子系统中,最外层的一个模块类,名称规则为:【模块名称+Module】,编写这个类是为了使用Prism加载这个模块。

    JHRS(基础类库)

    c3b5a0ffe53664d44fc3485cda05d171.png

    基础类库,可以任意扩展,该库可以供其它所有库引用。

    JHRS.GenerateAPI(代码生成工具)

    该工具是在线解析swagger生成供Refit调用的接口,生成的接口如下:

    3769fa25cf57f536c063129403709415.png

    调用接口的示例代码如下:

    var response = await RestService.For(baseUrl).Login(CurrentUser);if (!response.Succeeded){ Alert(response.Message); return;}

    最后


    对于WPF开发来说,我并不是很熟悉,这段时间以来一直网上学习和借鉴一些开源的框架,再结合实际项目而整出来的这个开发框架;可能对于从事WPF开发的朋友来说有一定的借鉴意义。

    完整的项目代码已经开源到github上面。在这个项目中,并不包含web api的项目。

    除非注明,文章均由 Dotnet9 整理发布,欢迎转载。

    展开全文
  • 一个新学WPF的IT老鸟,肝了2个月做了这么一个WPF企业级开发框架,站长clone学习,觉得甚是不错。这是一个使用了Prism搭建的插件式框架,封装了DataGrid的使用,使整个框架子模块简单易学、易扩展,特别是作者还写了...

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    一个新学WPF的IT老鸟,肝了2个月做了这么一个WPF企业级开发框架,站长clone学习,觉得甚是不错。这是一个使用了Prism搭建的插件式框架,封装了DataGrid的使用,使整个框架子模块简单易学、易扩展,特别是作者还写了一个系列博客教程,值得点赞。


    下面是作者博文系列首篇:WPF企业级开发框架搭建指南(启示录),2020从入门到放弃


    这个系列的文章旨在记录工作中使用WPF开发新的医疗项目中,有感于必须统一掉一些规范上的事情,并且提高团队开发效率,遂折腾了这么一个半吊子的框架,这个标题WPF企业级开发框架搭建指南,2020从入门到放弃可能会唬住一些人,但看到这些零碎文字的朋友就凑和着看吧,如果能帮助到你,那也荣幸了。

    WPF技术是一个很不错的技术,但一直没有上手过正式的项目,趁在做这个医疗项目时,遂搭建一个WPF开发框架,目的是为了统一WPF开发并提高开发效率;我对WPF技术算是零基础,现学现卖,用这些不成体系的文字予以记录一些想法和实践。

    文章目录

    WPF企业级开发框架搭建系列文章导航


    1. WPF企业级开发框架搭建指南(启示录)
    2. JHRS开发框架之基础类库
    3. JHRS开发框架之第三方框架选型
    4. JHRS开发框架之WPF调用Web API封装
    5. JHRS开发框架之客户端入口项目
    6. JHRS开发框架之各子系统如何整合
    7. JHRS开发框架之怎样设计合理的ViewModel基类
    8. JHRS开发框架之公用组件用户控件的封装
    9. JHRS开发框架之建议遵循的一些建目录文件原则
    10. JHRS开发框架之WPF数据验证
    11. JHRS开发框架之ViewModel相互传参和弹框回传参的解决办法
    12. JHRS开发框架之踩坑记(终章)

    WPF管理系统开发框架设计图


    在正式开始WPF开发框架搭建之前,做了一些技术选型和在群里面咨询了下对WPF技术比较了解的群友,当中就属dotnet9.com的站长经常被笔者叨扰。先来说说我期望中的开发框架要实现哪些功能。

    在开始搭建之前呢,还是晾一下最终的架构图吧。

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    上图就是折腾出来的一个框架,图不美观的话,大伙也就凑合着看吧。下图是解决方案:

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    开发环境


    因为项目是使用WPF来开发的,自然基于【MVVM】的理念搭建了这么一个快速开发框架,适用于开发【传统类型的管理系统】,并通过调用web api的方式来完成所有的业务操作,在WPF的Page,窗体(Window),用户控件的后置代码,几乎不会有任何的业务代码,除了一些控制界面行为的功能。

    在搭建这个框架时,是基于最新的 【 .net 5】用的技术版本是比较新的,演示代码中,wpf也是使用 .net 5。

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    使用技术说明

    • 技术平台:.Net 5.0
    • 技术框架:WPF + Prism+ AspectInjector + Refit
    • IoC组件:Prism自带Prism.Unity
    • 数据序列化:Newtonsoft.Json,可替换
    • 日志记录:系统自带

    解决方案详解


    解决方案从上到下依次为:

    JHRS.Core(客户端业务核心)

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    在JHRS.Core这个库里面,各个目录功能说明如下:

    1. Aop:实现了一个点击按钮显示转圈圈效果的类,一般用于加载数据,点击按钮从服务器获取数据让用户等侯片刻。
    2. Apis:保存着代码生成工具【JHRS.GenerateAPI】自动生成的接口,该工具可以在线解析swagger生成供调用的接口,参见这里(使用该工具需要设置swagger地址,另外有bug的话,自己修改下就可以了)。
    3. Controls:定义了WPF界面使用的公用控件(保存在Controls目录),如通用表格(DataGrid),下拉框等,凡公用的控件,都可以保存在此目录。
    4. Enums:公用的枚举,各个模块可以引用。
    5. Events:事件类,Prism自带事件总线,相应的事件类在这个目录创建,具体应用参见这里。
    6. Extensions:扩展类
    7. Identity:身份认证,即登录系统后,从服务器端获取到的身份认证会话信息(用户,token等)。
    8. Models:各个模块的DTO对象,一般是根据swagger解析出各个接口的实体对象(输入,输出DTO)。
    9. Modules:模块的辅助类。
    10. ViewModels:这个目录里面定义了ViewModel的基类,处理各个功能Page业务的ViewModel类,需要从这里继承对应的类,如管理页面继承BaseManagePageViewModel,而新增编辑页面继承BaseDialogPageViewModel类等。并且在基类里面定义了公共方法,如消息提示框,消息弹框,打开模态窗口等,效果见下方所示。

    JHRS.Shell(WPF客户端入口程序)

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    JHRS.Shell是WPF客户端项目的入口程序,并且定义了整个系统公用的消息提示框,模态窗口风格,主窗口等;登录的入口也是在这里定义的,登录系统后,可以自行实现权限功能加只加载对应的子模块(子系统);在程序启动时,会自动做一些初始化操作,扫描程序集自动注入相关功能,具体实现参见这里。

    消息提示框

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    消息弹框

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    确认消息框

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    模态窗口

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    遮罩层效果(蒙层效果或Loading效果)

    遮罩层效果一般用于点击按钮,加载数据时使用,即调用接口到数据呈现中间有一个等待的过程,就可以显示出来,因此在框架中通过AOP方式封装了这么一个效果,调用时在相关的地方标记一个特性即可。先来看看效果。

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    该效果是直接从CSDN抠过来的,然后整到到代码里面去的,纯演示目的。

    参考链接:https://blog.csdn.net/lhx527099095/article/details/8005095

    modules解决方案文件夹

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    在modules这个解决方案文件夹里面的是各个子模块,也就是各个子系统,例如【JHRS.OutpatientSystem】是WPF项目的子系统之一(门诊模块);在各子系统中,最外层拥有一个Module的类(OutpatientSystemModule),需要实现IModule接口供Prism自动扫描注册到容器里面。

    在子模块中,目录的组织原则如下。

    目录组织原则

    |----- JHRS.OutpatientSystem 命名规则:【JHRS】点【模块名称】

    |----- Controls 表示当前模块的控件库存放目录

    | |------- Manager 子目录

    | |------- SysManager 子目录

    | |--------其它子目录

    |------ Extensions 当前模块扩展类

    |------ Model 当前模块实体,如查询条件实体

    |------ ViewModels 【固定命名,不能改动】

    | |------ScheduManager 各管理功能目录

    | |--------XXXXViewModel.cs 每个功能页面的ViewModel类

    | |--------其它ViewModel.cs 其它页面的ViewModel

    |-------Views 【WPF页面,固定命名】

    | |------ ScheduManager 功能目录

    | |------XXXXXXX.xaml WPF页面

    | |------XXXXXXX.xaml WPF页面

    | |-------SysManager 功能目录

    |------- OutpatientSystemModule 命名:模块名称+Module

    在每一个子系统中,最外层的一个模块类,名称规则为:【模块名称+Module】,编写这个类是为了使用Prism加载这个模块。

    JHRS(基础类库)

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    基础类库,可以任意扩展,该库可以供其它所有库引用。

    JHRS.GenerateAPI(代码生成工具)

    该工具是在线解析swagger生成供Refit调用的接口,生成的接口如下:

    推荐一个IT老鸟肝了2月有余的免费开源WPF企业级开发框架

    调用接口的示例代码如下:

    var response = await RestService.For<ILoginApi>(baseUrl).Login(CurrentUser);if (!response.Succeeded){ Alert(response.Message); return;}

    最后


    对于WPF开发来说,我并不是很熟悉,这段时间以来一直网上学习和借鉴一些开源的框架,再结合实际项目而整出来的这个开发框架;可能对于从事WPF开发的朋友来说有一定的借鉴意义。

    完整的项目代码已经开源到github上面。在这个项目中,并不包含web api的项目。

    本文markdown原文分享:https://dotnet9.com/2020-09-07

    除非注明,文章均由 Dotnet9 整理发布,欢迎转载。

    转载请注明:
    作者:Dotnet9
    链接:https://dotnet9.com/16199.html
    来源:Dotnet9
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

     

    展开全文
  • JHRS一个新学WPF的IT老鸟,肝了2个月做了这么一个WPF企业级开发框架,站长clone学习,觉得甚是不错。这是一个使用了Prism搭建的插件式框架,封装了DataGrid的使用,使整个框架子模块简单易学、易扩展,特别是作者还...
  • 这几年用WPF开发的越来越多了,因为公司是追求效益的,追求最大的生产利润。软件开发这行业也一样,要节约成本,就要缩短开发周期,提高劳动生产率。要提高劳动生产率,就要选择最为合适的开发工具。以前用C++,后来...
  •  关于其他:就是大家能够利用业余时间一起交流沟通,共同提高,构建一个属于自己的企业级软件开发平台。   加入方式  因为是起草开源的项目,不会采取收费或者是什么方面的方式,可能在未来,一旦项目...
  • 前阵子在公司弄个内部的进销存管理系统,从了解需求、系统设计到编码,大约耗费了两个月时间,后来公司有了其他的安排,这东西就算黄了。顺便吐槽一下,厂里的一些人说话真心不顾别人感受,邮件啥的没一句舒服的。...
  • wpf中使用IDataErrorInfo实现数据校验,绑定实体需要实现了此接口,并在UI绑定表达式中添加... 下面结合我的项目中的一部分代码做一说明,具体效果见wpf企业级开发中的几种常见业务场景。  UI绑定 <...
  • WPF其实不仅仅是图形引擎而已,它将给Windows应用程序的开发带来一次革命,因为新的架构提供了一种全新的开发模式。当然对于普通用户而言,最直观的就是界面越来越漂亮,看起来越来越舒服了;但对于开发人员而言,...
  • 主从结构在企业级应用中相当常见,这里结合我的例子谈一下wpf中主从结构列表展示的常用做法,具体效果见wpf企业级开发中的几种常见业务场景。  首先,Model有两种,主表对应model(假设为modelA),从表对应的...
  • 关于UI模块的解耦,说简单点,首先需要配置菜单与对应操作类的映射关系(或存放于配置文件,或继承接口直接写死在模块代码中,或存放到数据库,原理都一样),然后在...具体效果见wpf企业级开发中的几种常见业务场...
  • 优点: 功能强大,开发复杂界面效率极高,是MFC的10倍以上,几乎可以...由于是托管代码,底层采用DirectX,运行效率比二进制代码低,对显卡有一定的要求WPF适合做定制项目或产品的客户端开发,现代的计算机速度下,...
  • wpf里面实现层次绑定主要使用HierarchicalDataTemplate,这里主要谈一谈带checkbox的treeview,具体效果见wpf企业级开发中的几种常见业务场景。  先来看一下我的控件绑定,我这里实现的是模块权限的编辑。具体效果...
  • [Packt Publishing] 企业级架构 MVVM 模式指南 (WPF 和 Silverlight 实现) (英文版) [Packt Publishing] MVVM Survival Guide for Enterprise Architectures in Silverlight and WPF (E-Book) ☆ 出版信息:☆ ...
  • 这里我给自己的控件命名为SelectButton,具体效果见wpf企业级开发中的几种常见业务场景。  我的SelectButton是个用户控件,里面包含一个Button和一个TextBox,Button用于触发事件,TextBox用来显示选择后的结果。...
  • Style这个东西几乎是无处不在,这个类似于web开发中的css样式,想要做一个很丰富的UI,这个东西是必不可少的,我也不是专业的UI开发者,这边只能介绍Style在WPF中的用法 下面有一个下载地址,这个demo还可以供...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 182
精华内容 72
关键字:

wpf企业级