当前位置: 首页 > news >正文

示例:推荐一个应用Adorner做的表单对话框

一、目的:开发过程中经常会修改和查看一个Model的数据,一般情况下会自定义一个控件或Window去显示Model数据,但这种数据如果比较多会增加很多开发工作,本文介绍一种通用的方式,应用表达Form控件去简化处理,通常下只需在Model的Property属性上增加一些特性即可定制显示的表单信息和验证信息。


二、实现

显示效果如下 

三、环境


VS2022 Net7

四、使用方式

1、安装nuget包:H.Modules.Messages.Dialog和H.Modules.Messages.Form

 
首先,定义一个实体Model

public class Student
{[Display(Name = "姓名", GroupName = "基础信息")][Required]public string Name { get; set; }[Display(Name = "班级", GroupName = "基础信息")][Required]public string Class { get; set; }[Display(Name = "地址", GroupName = "基础信息")][Required]public string Address { get; set; }[Display(Name = "邮箱", GroupName = "基础信息")][Required]public string Emall { get; set; }[Display(Name = "可用", GroupName = "其他信息")][Required]public bool IsEnbled { get; set; }[Display(Name = "时间", GroupName = "其他信息")][Required]public DateTime Time { get; set; }[Display(Name = "年龄", GroupName = "基础信息")][Required]public int Age { get; set; }[Display(Name = "分数", GroupName = "成绩信息")][Range(0.0, 150.0)]public double Score { get; set; }[Display(Name = "电话号码", GroupName = "基础信息")][Required][RegularExpression("^1[3|4|5|7|8][0-9]{9}$", ErrorMessage = "手机号码不合法!")]public string Tel { get; set; }}

之后,调用表单控件显示

            var student = new Student();await AdornerDialog.ShowPresenter(new StaticFormPresenter(student));

通过以上步骤即可实现该效果,详细说明如下

1,修改Student的属性的[Display(Name = "电话号码", GroupName = "基础信息")]特性可以自定义表单上显示的名称;

2,如果想增加自定义验证规则可以修改属性的[RegularExpression("^1[3|4|5|7|8][0-9]{9}$", ErrorMessage = "手机号码不合法!")]等继承自从ValidationAttribute特性,比如这句就是验证电话号码是否合法的特性;

再修改执行代码如下:

            Student student = new Student();Func<bool> canSumit = () =>{if (student.ModelStateDeep(out string error) == false){IocMessage.Dialog.Show(error);return false;}return true;};StaticFormPresenter presenter = new StaticFormPresenter(student);await AdornerDialog.ShowPresenter(presenter, x =>{x.DialogButton = DialogButton.Sumit;x.Title = "Form Dailog";}, canSumit);

这时就会在提交时验证数据是否合法,当数据不合法时弹出异常信息,效果如下:

(注:验证数据这部分功能v1.0.1版本有问题,后面版本会修复) 

显示查看详情信息代码如下:

 Student student = new Student();Func<bool> canSumit = () =>{if (student.ModelStateDeep(out string error) == false){MessageBox.Show(error);return false;}return true;};StaticFormPresenter presenter = new StaticFormPresenter(student);presenter.UsePropertyView = true;await AdornerDialog.ShowPresenter(presenter, x =>{x.DialogButton = DialogButton.None;x.Title = "Form Dailog";}, canSumit);

效果如下:

AdornerDailog部分参考文章:示例:推荐一个应用Adorner做的消息对话框-CSDN博客 

五、需要了解的知识点

RegularExpressionAttribute 类 (System.ComponentModel.DataAnnotations) | Microsoft Learn

ValidationAttribute 类 (System.ComponentModel.DataAnnotations) | Microsoft Learn

DisplayAttribute 类 (System.ComponentModel.DataAnnotations) | Microsoft Learn

System.Windows.Controls 命名空间 | Microsoft Learn

六、源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

七、了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

相关文章:

  • Linux ComfyUI安装使用;Stable Diffusion 3使用
  • day3-xss漏洞(米斯特web渗透测试)
  • 【已解决】在IDEA中使用Git拉取代码时提示:Can‘t update / master has no tracked branch
  • 昇思25天学习打卡营第1天|快速入门
  • Ubuntu 24.04 安装 libaio1 和 libaio-dev
  • 在C++中,构造器(Builder)模式的思考(《C++20设计模式》及常规设计模式对比)
  • 【database1】mysql:DDL/DML/DQL,外键约束/多表/子查询,事务/连接池
  • Python: create object
  • Trimesh介绍及基本使用
  • 【notes2】并发,IO,内存
  • EndNote 21 for Mac v21.3 文献管理软件安装
  • 微信小程序建议录音机
  • 数组 (java)
  • 一文读懂LLM API应用开发基础(万字长文)
  • 注意 llamaIndex 中 Chroma 的坑!
  • CentOS6 编译安装 redis-3.2.3
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Java深入 - 深入理解Java集合
  • Laravel5.4 Queues队列学习
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • magento2项目上线注意事项
  • Python语法速览与机器学习开发环境搭建
  • Redux 中间件分析
  • Solarized Scheme
  • Vue--数据传输
  • zookeeper系列(七)实战分布式命名服务
  • ------- 计算机网络基础
  • 近期前端发展计划
  • 跨域
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 正则学习笔记
  • 数据可视化之下发图实践
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #NOIP 2014#Day.2 T3 解方程
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (23)mysql中mysqldump备份数据库
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二)Linux——Linux常用指令
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (四)linux文件内容查看
  • (循环依赖问题)学习spring的第九天
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • **PHP分步表单提交思路(分页表单提交)
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .net core 6 集成和使用 mongodb
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net 无限分类
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .project文件
  • @NestedConfigurationProperty 注解用法