原文:WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)对象绑定

WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)

上面的使用动态对象加载的数据 发现一个问题 一个是卡 二是 对象数量得写死 很不开心

最后使用对象方式 也应该使用对象方式

因为业务需要 我的datagird 数据来源于俩个对象 列头是一个,行和行内容是一个  不好的点是列行的数据匹配 不好掌控 因为业务问题 数据库设计问题 后期再修改成一个对象吧

行对象对象 ColumnsViewModel  里包含 行和行内容

Ml是行内容集合 与列对应


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.ComponentModel;
  5. using System.Linq;
  6. using System.Text;
  7. namespace HDG_COMPLEX_INPUT.ViewMode
  8. {
  9. public class DataRowViewModel : INotifyPropertyChanged
  10. {
  11. public event PropertyChangedEventHandler PropertyChanged;
  12. public DataRowViewModel() { }
  13. //public DataRowViewModel(string name, string jOb, string class_, int num, List<DataViewModel> model, string spID) { Name = name; Class_ = class_; JOb = jOb; Num = num; Ml = model; STEPID = spID; }
  14. private string sTAFFID;
  15. public string STAFFID
  16. {
  17. get { return sTAFFID; }
  18. set
  19. {
  20. sTAFFID = value;
  21. if (PropertyChanged != null)
  22. {
  23. PropertyChanged(this, new PropertyChangedEventArgs("STAFFID"));
  24. }
  25. }
  26. }
  27. private string name;
  28. public string Name
  29. {
  30. get { return name; }
  31. set
  32. {
  33. name = value;
  34. if (PropertyChanged != null)
  35. {
  36. PropertyChanged(this, new PropertyChangedEventArgs("Name"));
  37. }
  38. }
  39. }
  40. private int num;
  41. public int Num
  42. {
  43. get { return num; }
  44. set
  45. {
  46. num = value;
  47. if (PropertyChanged != null)
  48. {
  49. PropertyChanged(this, new PropertyChangedEventArgs("Num"));
  50. }
  51. }
  52. }
  53. private string class_;
  54. public string Class_
  55. {
  56. get { return class_; }
  57. set
  58. {
  59. class_ = value;
  60. if (PropertyChanged != null)
  61. {
  62. PropertyChanged(this, new PropertyChangedEventArgs("Class_"));
  63. }
  64. }
  65. }
  66. private string jOb;
  67. public string JOb
  68. {
  69. get { return jOb; }
  70. set
  71. {
  72. jOb = value;
  73. if (PropertyChanged != null)
  74. {
  75. PropertyChanged(this, new PropertyChangedEventArgs("JOb"));
  76. }
  77. }
  78. }
  79. private List<DataViewModel> ml;
  80. public List<DataViewModel> Ml
  81. {
  82. get { return ml; }
  83. set
  84. {
  85. ml = value;
  86. if (PropertyChanged != null)
  87. {
  88. PropertyChanged(this, new PropertyChangedEventArgs("Ml"));
  89. }
  90. }
  91. }
  92. }
  93. public class DataViewModel : INotifyPropertyChanged
  94. {
  95. public event PropertyChangedEventHandler PropertyChanged;
  96. /// <summary>
  97. /// 颜色
  98. /// </summary>
  99. private string rPG;
  100. public string RPG
  101. {
  102. get { return rPG; }
  103. set { rPG = value;
  104. if (PropertyChanged != null)
  105. {
  106. PropertyChanged(this, new PropertyChangedEventArgs("RPG"));
  107. }
  108. }
  109. }
  110. /// <summary>
  111. /// 秒数
  112. /// </summary>
  113. private string second;
  114. public string Second
  115. {
  116. get { return second; }
  117. set { second = value;
  118. if (PropertyChanged != null)
  119. {
  120. PropertyChanged(this, new PropertyChangedEventArgs("Second"));
  121. }
  122. }
  123. }
  124. /// <summary>
  125. /// 个数
  126. /// </summary>
  127. private int cOUNT;
  128. public int COUNT
  129. {
  130. get { return cOUNT; }
  131. set { cOUNT = value; }
  132. }
  133. /// <summary>
  134. /// 子项目名
  135. /// </summary>
  136. private string sTEPNAME;
  137. public string STEPNAME
  138. {
  139. get { return sTEPNAME; }
  140. set { sTEPNAME = value; }
  141. }
  142. //标准秒数
  143. private string sSecond;
  144. public string SSecond
  145. {
  146. get { return sSecond; }
  147. set
  148. {
  149. sSecond = value;
  150. if (PropertyChanged != null)
  151. {
  152. PropertyChanged(this, new PropertyChangedEventArgs("SSecond"));
  153. }
  154. }
  155. }
  156. }
  157. }

DATAgrid 绑定 行集合

先绑定Ml对象  在自定义控件内定义依赖属性 接受 在拆解对象


  1. /// <summary>
  2. /// 生成DataGrid 列
  3. /// </summary>
  4. void addColumn()
  5. {
  6. dataGrid.Columns.Clear();
  7. for (int i = 0; i < ListColumn.Count; i++)
  8. {
  9. //生成 列
  10. DataGridTemplateColumn dl = new DataGridTemplateColumn();
  11. //获得列头信息 格式 : 上下カップ押え_62s_B_4
  12. ColumnsViewModel model = ListColumn[i];
  13. dl.Header = model.Clm;
  14. //数据绑定
  15. Binding binding = new Binding()
  16. {
  17. Path = new PropertyPath("Ml["+i+"]")// 需绑定的数据源属性名
  18. ,
  19. Mode = BindingMode.OneWay// 绑定模式
  20. ,
  21. UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
  22. };
  23. //生成数据模板
  24. DataTemplate MyDataTemplate = new DataTemplate();
  25. //生成自定义控件
  26. var Item = new FrameworkElementFactory(typeof(ItemControl));
  27. Item.SetBinding(ItemControl.SetRGBProperty, binding); //数据绑定
  28. MyDataTemplate.VisualTree = Item;//注册可视树
  29. dl.CellTemplate = MyDataTemplate;//单元格模板注册
  30. dataGrid.Columns.Add(dl);
  31. }
  32. }

一定会有更好的办法  这个程序设计上是有问题的 数据太复杂   时间还少

开发也没时间思考  所以 很多人不愿意维护别人的代码

有好的设计模式 就给更新掉

WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)对象绑定的更多相关文章

  1. WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)

    原文:WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件) 因为项目需要 要实现这个~ 怎么实现画红框内容部分 田字格和上面Textbox 属于一个自定义控件  大 ...

  2. vue原生表格怎样实现动态列及表格数据下载

    最近项目经常用到带有合并效果以及动态列的表格,而翻阅iview和element-ui官网没有找到合适的(也有可能自己的水平有限,不会改写),所以只好自己用原生表格写了一个,具体效果如下: 这个表格右侧 ...

  3. WPF - 多列ListView添加数据的多种方式

    多列ListView: <ListView x:Name="listView"> <ListView.View> <GridView> < ...

  4. wpf ListBox或ListView等数据控件 绑定数据,最简单的方式

    在网上很难找最简单的案例,都是一大片,看着都头疼: 试试举一反三,如果把结果赋给DataContext这个属性,那就前台需要绑定ItemsSource="{Binding}",请注 ...

  5. [置顶] DataGridView控件---绑定数据方法

             DataGridView控件是在windows应用程中显示数据最好的方式,它只需要几行简短的代码就可以把数据显示给用户,同时又支持增.删.改操作.今天将自己总结的增加数据的方法总结分 ...

  6. [Phoenix] 八、动态列

    摘要: 传统关系型数据库的动态列实现只能依赖逻辑层的设计实现,而Phoenix是HBase上的SQL层,借助HBase特性实现的动态列功能,具有高度的灵活性,告别业务逻辑层的复杂设计. 一.概要 动态 ...

  7. angular学习笔记(三)-视图绑定数据的两种方式

    绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...

  8. python 类的绑定方法和非绑定方法

    一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. class People: def __ ...

  9. Learning-Python【25】:绑定方法与非绑定方法

    类中定义函数分为了两大类,绑定方法与非绑定方法,它们有一些特殊之处: 1.绑定方法特殊之处:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法:这个在面向对象第一篇第六 ...

随机推荐

  1. Spring 核心技术与产品理念剖析【下】

    3. Spring Cloud 蝶变重生 Spring 框架的升级演进都是围绕分层架构进行的,从简单到复杂,再回到简单的过程.如果我们没有经历过 Spring 最开始繁琐的配置,然后一步步精简,就根本 ...

  2. java使用htmlunit工具抓取js中加载的数据

    htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目可以模拟浏览器运行,被誉为java浏览器的开源实现.这个没有界面的浏览器,运行速度 ...

  3. SpringCloud之Eureka:集群搭建

    上篇文章<SpringCloud之Eureka:服务发布与调用例子>实现了一个简单例子,这次对其进行改造,运行两个服务器实例.两个服务提供者实例,服务调用者请求服务,使其可以进行集群部署. ...

  4. Cnblogs图片无法上传

      2019年5月28日以前的两三个月时间,使用cnblogs原来的接口时,提示图片无法上传,空间不足,实在没办法了,自己实现了博客代理,发现上传图片时返回了503错误,只好先把图片传到其它服务器,再 ...

  5. ActiveMQ下载与安装(消息中间件JMS)

    下载 官方网站下载:http://activemq.apache.org/ 1.3.2安装(Linux) (1)将apache-activemq-5.12.0-bin.tar.gz 上传至服务器 (2 ...

  6. centos7在线yum安装mysql时官方镜像下载过慢的解决方案

    帮客户调试数据库,搭建一测试环境,centos7最小化安装后,在线安装mysql. 步骤: 1. wget -i http://dev.mysql.com/get/mysql57-community- ...

  7. Python监控主机是否存活,并发报警邮件

    利用python写了简单测试主机是否存活脚本,此脚本不适于线上使用,因为网络延迟.丢包现象会造成误报邮件,那么后续会更新判断三次ping不通后再发报警邮件,并启用多线程处理. #!/usr/bin/e ...

  8. 如何写一个Python万能装饰器,既可以装饰有参数的方法,也可以装饰无参数方法,或者有无返回值都可以装饰

    Python中的装饰器,可以有参数,可以有返回值,那么如何能让这个装饰器既可以装饰没有参数没有返回值的方法,又可以装饰有返回值或者有参数的方法呢?有一种万能装饰器,代码如下: def decorate ...

  9. springmvc+mybatis需要的jar包与详解

    https://www.cnblogs.com/luohengstudy/p/7772109.html

  10. 从壹开始 [ 学调试 ]║ 轻松实现 PC端+移动端的本地同步联调

    缘起 哈喽!(瞬间就想到了开场白:亲爱的朋友们,我又回来了