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

发布于:2024-06-23 ⋅ 阅读:(38) ⋅ 点赞:(0)

一、目的:开发过程中经常会修改和查看一个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个人主页-哔哩哔哩视频


网站公告

今日签到

点亮在社区的每一天
去签到