环境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. AcWing 361. 观光奶牛

    01规划 设答案为 \(ans\). 二分答案,设当前二分值为 \(mid\). 设一个环 \(S\) 的边权为 \(t_1, t_2, t_3...\),点权为 \(f_1, f_2, f_3... ...

  2. 笔记-[ZJOI2014]力

    [ZJOI2014]力 \[\begin{split} E_j=&\sum_{i=1}^{j-1}\frac{q_i}{(i-j)^2}-\sum_{i=j+1}^{n}\frac{q_i}{ ...

  3. 算法——1~n 整数中 1 出现的次数

    输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次. leetcode 解题思路:依次遍历每一 ...

  4. 120多套各种类别微信小程序模板源码打包下载

    120多套各种类别微信小程序模板源码打包下载,以下是部分截图欢迎下载!120多套各种类别微信小程序模板源码打包下载 下载地址:https://pan.baidu.com/s/1Cfqyc9p2ZDOc ...

  5. 20201213-1 HTML基本标签(一)

    > HTML 基本结构 <> </> 标签对   > 一个 HTML 文档由 4 个基本部分组成: 文档声明:<!DOCTYPE HTML>声明这是一个 ...

  6. linux下postgresql安装

    1.下载地址 https://www.enterprisedb.com/download-postgresql-binaries 2.创建用户并修改密码 [root@node01 ~]# userad ...

  7. Unity状态机(Animator)

    状态机的状态(State) 每个Animator Controller都会自带三个状态:Any State, Entry和 Exit.  

  8. vue 事件函数传参

    事件函数传参 在元素绑定事件时候,如果我们的函数没有传参,他也会有一个默认的传参值 event 但是如果我们的函数有传参,那么它必须作为做为最后一个传参值显示传递,且必须为$event 通过代码打印我 ...

  9. 移动 drag&drop拖放

    拖放事件 #1. 三个对象 源对象 -- 被拖放的元素 过程对象 -- 经过的元素 目标对象 -- 到达的元素   #2. 源对象中的事件 要想让某个元素可以拖拽需要设置draggable=" ...

  10. 详细讲解docker容器和镜像的区别

    当我对Docker技术还是一知半解的时候,我发现理解Docker的命令非常困难.于是,我花了几周的时间来学习Docker的工作原理,更确切地说,是关于Docker统一文件系统(the union fi ...