环境Win10 VS2019 .Net Framework4.8

在wpf中,如果为一个DataGrid绑定到一个数据源,默认情况下DataGrid会为数据源类型的每个属性生成一个列(Column)对象.但并没有简单的方式用来控制列的生成顺序.

DataGrid提供了两个与自动生成列有关的事件,分别是:

  • AutoGeneratingColumn  会在为每个属性创建列时引发,引发时列已经创建完毕,在这个事件中可以:

    • 通过e.Column获取已经创建的列对象,并对其进行修改.
    • 通过将e.Cancel设为true,以放弃该列.
    • 如果不将e.Cancel设为true,则该事件后DataGrid会立刻将列加入列集合(Columns)中.
    • 通过e.PropertyDescriptor可以知道当前是为什么属性在创建列,以及该属性的细节信息,包括属性所拥的Attribute集合.
  • AutoGeneratedColumns  会在为所有属性创建列完成时引发.

想要达到本文的目的,思路如下:

  • 创建一个可以用在属性上的自定义Attribute,其包含一个值,用来表示为属性自动创建的列相对于所有列的位置.
  • 在AutoGeneratingColumn事件中:
    • 将e.Cancel设为true,使DataGrid认为所有自动创建的列都被取消(放弃)了.
    • 通过e.PropertyDescriptor读取自定义的Attribute,从中取出位置信息.
    • 将位置信息和列对象保存起来.
  • 在AutoGeneratedColumns事件中对保存下来的列的集合进行排序,然后按顺序全部加入到DataGrid.Columns中

全部的代码我放在

https://github.com/xiejiang2014/DataGrid-Attribute

wpf 通过为DataGrid所绑定的数据源类型的属性设置Attribute改变DataGrid自动生成列的顺序的更多相关文章

  1. WPF DataGrid自动生成列

    <Window x:Class="DataGridExam.MainWindow"        xmlns="http://schemas.microsoft.c ...

  2. Silverlight数据绑定之 绑定一个int类型的属性

    还就真心不会啊! 在类FunctionPanel中作如下定义: /// <summary> /// 鼠标状态 属性 /// </summary> public Dependen ...

  3. WPF/C# 快捷键 自动生成方法

    原文:WPF/C# 快捷键 自动生成方法 这一篇文章会很短~ 在写依赖属性的会后   propdb 会自动生成依赖属性所有的内容 但是如果我写属性变化通知的时候   希望有一个快捷键能自动生成方法 怎 ...

  4. WPF DataGrid绑定到数据源的方法

    string conStr = System.Configuration.ConfigurationManager.ConnectionStrings["str"].Connect ...

  5. WPF Datagrid 动态生成列 并绑定数据

    原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用  可 ...

  6. WPF Binding学习(四) 绑定各种数据源

    转自:http://blog.csdn.net/lisenyang/article/details/18312199 1.集合作为数据源 首先我们先创建一个模型类 public class Stude ...

  7. WPF绑定各种数据源之object数据源

    一.WPF绑定各种数据源索引 WPF 绑定各种数据源之Datatable WPF绑定各种数据源之object数据源 WPF绑定各种数据源之xml数据源 WPF绑定各种数据源之元素控件属性 Bindin ...

  8. WPF绑定各种数据源之xml数据源

    一.WPF绑定各种数据源索引 WPF 绑定各种数据源之Datatable WPF绑定各种数据源之object数据源 WPF绑定各种数据源之xml数据源 WPF绑定各种数据源之元素控件属性 Bindin ...

  9. WPF 数据绑定 1_1 基础知识&绑定到元素属性

    A.数据绑定基础: 数据源对象:WPF将从该对象中提取信息,交由目标对象进行显示. 目标对象:从数据源中提取信息,并赋给该对象的属性. B.绑定到元素属性 最简单的绑定情形则是将一个源对象指定为一个W ...

随机推荐

  1. 关于获取客户端IP问题

    //相关代码 1.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] 2.HttpContext ...

  2. 二、初步认识LoadRunner工具

    LoadRunner工具有三个组成分别是: Virtual User Generator:用户行为模拟:录制运行脚本. Controller:上面的录制一个用户操作,这个可以将其克隆成多个用户,模拟多 ...

  3. UWB硬件设计相关内容

    1.dw1000最小系统 2.器件选择建议: 射频前端  射频前端需要将差分信号转换成单端射频信号,一般使用HHM1595A1(俗称巴伦). 频率参考  晶振一般选择38.4MHZ的TCXO,但是要注 ...

  4. MAC 安装Python3.7

    查看下python版本 macosdeMacBook:Versions macos$ cd /System/Library/Frameworks/Python.framework/Versions/ ...

  5. 蚁剑AntSword插件:Bypass disable_Functions

    参考文章: https://www.uedbox.com/post/58634/ 参考视频: https://www.bilibili.com/video/BV1Et411G7D7?from=sear ...

  6. win10新版wsl2使用指南

    本篇文章会介绍win10中wsl2的安装和使用以及遇到的常见问题比如如何固定wsl2地址等问题的总结. 一.wsl2简介 wsl是适用于 Linux 的 Windows 子系统,安装指南:适用于 Li ...

  7. 设计模式——责任链(结合Tomcat中Filter机制)

    设计模式:责任链模式 说责任链之前,先引入一个场景,假如规定学生请假小于或等于 2 天,班主任可以批准:小于或等于 7 天,系主任可以批准:小于或等于 10 天,院长可以批准:其他情况不予批准:以此为 ...

  8. php学习之sqlite查询语句之多条件查询

    一.PHP+Mysql多条件-多值查询示例代码: index.html代码:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitio ...

  9. Filezilla账号设置多个文件夹

    问题描述 一个账号,使用多个文件目录.虽然可以这样设置,但是实际上客户端使用时只能使用一个目录(主目录). 所以想找一种方式,访问一个主目录时,也可以访问到其他的目录. 官网示例 https://wi ...

  10. python3参考秘籍-附PDF下载

    目录 简介 Python的主要数据类型 Python中的String操作 基本操作 String连接 String复制 Math操作 内置函数 函数Function 传递参数 列表 添加元素 从lis ...