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

原文: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. }

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

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

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

原文地址:https://www.cnblogs.com/lonelyxmas/p/12075409.html

时间: 2024-07-31 07:41:41

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

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

原文:WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件) 因为项目需要 要实现这个~ 怎么实现画红框内容部分 田字格和上面Textbox 属于一个自定义控件  大致功能是获得一个字符串 和一组颜色值 最后田字格会显示不同颜色 这篇主要讲 DataGridTemplateColumn 并实现重写Datatemplate 重点注释 单独列出来了 LS 是列数据对象集合 listName是行数据对象集合 var Item = new FrameworkElemen

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

在网上很难找最简单的案例,都是一大片,看着都头疼: 试试举一反三,如果把结果赋给DataContext这个属性,那就前台需要绑定ItemsSource="{Binding}",请注意.直接赋给ItemsSourc就不要绑定了: 后台代码: List<string> list = new List<string>(); for (int i = 0; i < 100; i++) { list.Add("sas" + i); } this.

自己在项目中的学习总结:利用工厂模式+反射机制+缓存机制,实现动态创建不同的数据层对象接口

工作一年多,自己小小的心得,方便自己以后查找.首先上架构截图: 且看截图,其中DALFactory为工厂类库,IDAL为接口类库,SQLServerDAL则为实际的数据层实现类库. 1.数据层实现.这个不多说,起始就是编写相关数据操作的方法. public partial class ActivityInfo:IActivityInfo { public int Add(ActivityInfo model) { reutrn 1; } } 2.IDAL接口 public interface I

很简单的列数据作为行字段输出(但是输出的动态列下的数据是有问题的,按场景修改)

set @XX=''; SELECT @XX := CONCAT( @XX,     ID , ',' ) FROM (SELECT DISTINCT ID FROM TX) A; set @YY =  CONCAT('SELECT TX.*,',LEFT(@XX,LENGTH(@XX)-1),'  FROM TX ');  PREPARE stmt2 FROM @YY; EXECUTE stmt2;

使用 MVVMLight 绑定数据

如果你还不知道如何在VS中加入MVVMLight的引用,那么建议你先翻阅这篇文章:在VS中安装/使用 MVVMLight 这篇文章主要是介绍如何使用MVVMLight来绑定数据到界面中(View),以此来了解MVVMLight的一些基础的类的用法. 文章底部会提供本示例的源码下载. MVVMLight绑定数据示例 好了,我们在新建了两个项目,分别是“MVVMLight的主程序” 与  “Model层”,运行的效果及解决方案结构如下: 其实很简单,就是绑定了一个数据源而已,编写的代码也不多,下面我

全面解析python类的绑定方法与非绑定方法

类中的方法有两类: 绑定方法 非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. class People: def __init__(self,name,age): self.name = name self.age = age def talk(self): pass p = People('xiaohua',18) print(p.talk) 输出结果: <bound m

Python3.7之绑定方法与非绑定方法

Python3.7之绑定方法与非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. class People: def __init__(self,name,age): self.name = name self.age = age def talk(self): pass p = People('xiaohua',18) print(p.talk) ''' 输出结果: <bou

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

原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用  可以用ObservableCollection集合代表 动态创建属性 WPF 动态生成对象属性 (dynamic) ObservableCollection<NameList> listName = new ObservableCollection<NameList>(); privat

WPF (DataGridColumnHeader)实现自义定列头样式 并绑定数据

原文:WPF (DataGridColumnHeader)实现自义定列头样式 并绑定数据 实现功能是这样的 自定义列头 样式 样式里的 数据来源于后台绑定 这篇就说头样式 和头样式数据绑定 思路 1)实现功能的时候 首先想的是编辑列头样式 选择使用DataGridTextColumn 编辑 DataGridColumnHeader 样式 样式很简单 就布局好了 这段结束 2)动态列 没有要求换肤 所以就没有完全使用MVVM 直接写后台循环   到这里数据有了 List<string> LS =