首页 > 其他分享 >DevExpress框架PropertyGridControl自定义属性,弹出框随意定制逻辑,自动设置属性到Model实体类

DevExpress框架PropertyGridControl自定义属性,弹出框随意定制逻辑,自动设置属性到Model实体类

时间:2023-09-05 22:55:25浏览次数:44  
标签:实体类 自定义 get CustModel set model null public 属性

DevExpress 框架 WPF
PropertyGridControl 组件

自定义属性弹出框,支持同类型属性多次设置,一次编写多次复用

XAML 代码
    <dxprg:PropertyGridControl Name="property">
        <dxprg:PropertyDefinition Type="models:CustModel">
            <dxprg:PropertyDefinition.CellTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition></ColumnDefinition>
                            <ColumnDefinition Width="20"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <Label Name="ShowTextLabel" Tag="{Binding Value}" Content="{Binding Value.Name}" Grid.Column="0"></Label>
                        <Button Grid.Column="1" Content="···" Tag="{Binding ElementName=ShowTextLabel}" Foreground="Gray" BorderBrush="Gray" Padding="0" Click="ButtonEditSettings_DefaultButtonClick"></Button>
                    </Grid>
                </DataTemplate>
            </dxprg:PropertyDefinition.CellTemplate>
        </dxprg:PropertyDefinition>
    </dxprg:PropertyGridControl>
    WindowDialog dialog = new WindowDialog();
    if ((bool)dialog.ShowDialog())
    {
        Button button = sender as Button;
        Label label = button.Tag as Label;
        CustModel model = label.Tag as CustModel;
        //反射获取属性
        PropertyInfo[] propertyInfos = property.SelectedObject.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
        PropertyInfo modelInfo = null;

        foreach (var item in propertyInfos)
        {
            if (item.GetValue(property.SelectedObject)== model)
            {
                modelInfo = item;
            }
        }
        if (model != null && model != null && label != null&& modelInfo!=null)
        {
            model.Name = dialog.GetText();
            label.Content = model.Name;
            modelInfo.SetValue(property.SelectedObject, model);
        }
    }
    public class CustModel
    {
        private string name = "Name";
        public CustModel()
        {

        }
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
    }
    public class Person
    {
        CustModel custModel1 = new CustModel();
        public CustModel CModel
        {
            get
            {
                return custModel1;
            }
            set
            {
                custModel1 = value;
            }
        }
        public CustModel CModel1 { get; set; } = new CustModel();
        public CustModel CModel2 { get; set; } = new CustModel();
        public string Name { get; set; }
        public int Age { get; set; }
        public string Address { get; set; }
        public DateTime Time { get; set; } = DateTime.Now;

    }
运行效果

属性界面
编辑界面

源码地址

码云仓库地址

技术交流

  • 感兴趣的可以加 QQ 群:765907694 一起交流,探讨技术问题

标签:实体类,自定义,get,CustModel,set,model,null,public,属性
From: https://www.cnblogs.com/Yann123/p/17681097.html

相关文章

  • uniapp项目实践总结(十)自定义滑动触摸组件
    在APP的日常开放过程中,我们经常可以看到上拉刷新、下拉刷新、左滑、右滑、触底加载等效果,那其中的原理是如何呢,又是如何实现的呢,下面就一探究竟。这篇文章主要是讲述自定义滑动触摸组件的方放,兼容网页H5端、微信小程序端和App端。目录准备工作原理分析组件实现实战......
  • 自定义企业培训系统:源码定制与扩展指南
    在现代企业中,持续学习和培训已经成为成功的关键要素之一。企业培训系统的存在已经变得不可或缺,因为它们允许企业为员工提供高质量的培训和教育,以提高他们的技能水平并满足不断变化的业务需求。然而,通用的培训系统可能无法满足每个企业的特定需求,这就是为什么自定义企业培训系统变得......
  • WPF学习 - 自定义窗体(二)
    上一篇文章写了如何创建自定义窗体:使用WindowChrome或者WindowStyle=“None”这两种方式。本文将讲述如何设置窗体的效果(以阴影效果为例),以及在效果模式下,窗体各功能的配合。一、窗体的空间范围:窗体的范围,就是白色区域部分:包括窗体的边框,标题栏,以及内部的空白部分。出了白色......
  • new方法、定制属性访问、描述符与装饰器知识点总结
    一:__new__方法思考:a.我们创建实例是通过什么方法创建的呢?b.类每次实例化的时候都会创建一个新的对象,如果要求类只能被实例化一次该怎么做呢?===通过单利模式实现   c.什么是单例模式(SingletonPattern 1、确保一个类只有一个实例,而且自行实例化并向整个系......
  • 自定义数据类型UI绑定
    场景:在收货地址列表页面A中,点击一个地址进详情页面B,然后修改地址保存关闭页面B,收货地址A需要同步UI更新修改的信息。机制:1、在SwiftUI中,使用@Binding只能绑定基本数据类型,不能处理自定义数据类型。2、@StateObject和@ObservedObject的监听,在目前的测试中体现的是向下传递。即......
  • JavaScript-属性描述对象
    概述JavaScript提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。这个内部数据结构称为“属性描述对象”(attributesobject)。每个属性都有自己对应的属性描述对象,保存该属性的一些元信息。下面是属性描述对象的一个例子。{value:123,......
  • a标签下载文件并自定义文件名
     一、href的属性地址必须是和你前端同源情况下<ahref="URL"download="文件名">//download属性也可以设置一个值来规定下载文件的名称。所允许的值没有限制,浏览器将自动检测正确的文件扩展名并添加到文件。注意:只有Firefox和Chrome支持download属性,如果涉及跨域情况下,d......
  • Dynamics 365 Marketing自定义渠道的步骤
    1.创建2个实体:渠道【new_flashinfosmschannel】、消息模板(配置窗体)注意:如果想用标准消息模板,可以不用创建消息模板标准消息模板效果:   2.导出解决方案,往XML增加一个关系【EntityRelationship】https://learn.microsoft.com/zh-cn/dynamics365/marketing/real-time-mark......
  • WPF 自定义窗体(一)
    .Net默认的窗体样式只有四种:None、SingleBorderWindow、ThreeDBorderWindow、ToolWindow,都比较“丑”。而很多时候,我们希望自定义窗体,比如,无边框,有阴影,或者有模糊效果等。在WPF中,要实现自定义窗体比较简单,主要有两种方法:1)使用WindowChrome;2)使用WindowStyle=“None”。一、使......
  • 哔哩哔哩 B站 bilibili 视频倍速设置 视频倍速可自定义
    目录一、复制如下代码二、在B站视频播放页面进入控制台(一)以火狐浏览器为例     (二)以谷歌浏览器为例三、将复制的代码粘贴到下方输入框,并回车Enter即可(一)以火狐浏览器为例     (二)以谷歌浏览器为例 四、然后就可以了一、复制如下代码(该代码用于设置倍速为3,最后......