如何让DEV PropertyGridControl根据自定义Attribute特性来自定义输入显示

本文介绍了如何在DevExpress WPF版本的PropertyGridControl中,通过自定义特性(UnitTypeAttribute)和枚举(UnitTypes)实现用户参数显示时的单位定制。通过在属性上添加特性,结合CustomDisplayText事件处理用户输入的显示,实现了参数单位的动态变化,提高了代码的可维护性。
摘要由CSDN通过智能技术生成

-------基于Dev13.2.5及以上版本

DevExpress13.2.5 及以上版本PropertyGridControl(WPF版本)这个控件同Visual Studio标准库中的PropertyGrid是同类的,都是用于快速便捷的显示一个类的Property属性,并提供用户输入的功能。具体作用可以参考MSDN,或者DevExpress HelpDocument 13.2.5。

写这个主题,主要是因为近期项目涉及到一个单位配置系统,用户需可以根据自身需要选择公制单位、英制单位以及自定义单位。在配置发生改变之后,UI涉及单位的参数输入部分则需要同步直观的跟着改变。在UI中,所有参数基本是以PropertyGridControl(WPF版本)作为用户输入接口的。

琢磨了一下,解决这个问题,脑子里大致有三种解决方案:

1.       在参数实体类中,在Property的DisplayName附加属性中加上单位,如图


显然,这种方式很不方便,要更改单位岂不是很麻烦,比如将MPa换成Pa?而且看起来也不舒服

2.       改写PropertyGridControl的Template,很显然,单单改写Template还不够,因为它缺乏单位对应的依赖项属性,那么我们需要在数据结构类中添加额外的Property来记录对应的参数的单位,显然,这个就破坏了代码的可重用性,甚至扰乱程序架构,处理数据的部分竟然还需要管UI的死活,这显然不合理。

3.       这种方法也是我采取的方法,则是通过自定义特性,给参数类属性添加单位类别的标记,然后在UI显示的时候根据单位标记来自定义显示,这个对于我们的需求也是比较合理的,也容易维护。

 

下面来具体说明:

首先,我们先模拟一个用户参数输入的类:UserParams

public class UserParams

    {

        [DisplayName("压力")]

        public double A { get; set; }

 

        [DisplayName("深度")]

        public double B { get; set; }

 

        [DisplayName("温度")]

        public double C { get; set; }

 

        public UserParams()

        {

            A = 1;

            B = 2;

            C = 3;

        }

}

 

 

可以看到,这个类用户需要三个参数,压力(MPa),深度(Km),温度(C)

其次,我们还需要构造一个自定义特性以及一个枚举来标示不同的类别的单位(UserParams类中有三种单位类别,即压力,长度,温度),类UnitTypeAttribute,枚举类型UnitTypes

///<summary>

    ///单位类型

   

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值