WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)
上面的使用动态对象加载的数据 发现一个问题 一个是卡 二是 对象数量得写死 很不开心
最后使用对象方式 也应该使用对象方式
因为业务需要 我的datagird 数据来源于俩个对象 列头是一个,行和行内容是一个 不好的点是列行的数据匹配 不好掌控 因为业务问题 数据库设计问题 后期再修改成一个对象吧
行对象对象 ColumnsViewModel 里包含 行和行内容
Ml是行内容集合 与列对应
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.ComponentModel;
- using System.Linq;
- using System.Text;
-
- namespace HDG_COMPLEX_INPUT.ViewMode
- {
- public class DataRowViewModel : INotifyPropertyChanged
- {
-
- public event PropertyChangedEventHandler PropertyChanged;
- public DataRowViewModel() { }
- //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; }
- private string sTAFFID;
-
- public string STAFFID
- {
- get { return sTAFFID; }
- set
- {
- sTAFFID = value;
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs("STAFFID"));
- }
- }
- }
- private string name;
- public string Name
- {
- get { return name; }
- set
- {
- name = value;
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs("Name"));
- }
-
- }
- }
-
- private int num;
- public int Num
- {
- get { return num; }
- set
- {
- num = value;
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs("Num"));
- }
- }
- }
-
- private string class_;
- public string Class_
- {
- get { return class_; }
- set
- {
- class_ = value;
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs("Class_"));
- }
- }
- }
-
- private string jOb;
- public string JOb
- {
- get { return jOb; }
- set
- {
- jOb = value;
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs("JOb"));
- }
- }
- }
-
-
-
-
- private List<DataViewModel> ml;
- public List<DataViewModel> Ml
- {
- get { return ml; }
- set
- {
- ml = value;
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs("Ml"));
- }
- }
- }
-
-
- }
- public class DataViewModel : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged;
- /// <summary>
- /// 颜色
- /// </summary>
- private string rPG;
-
- public string RPG
- {
- get { return rPG; }
- set { rPG = value;
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs("RPG"));
- }
- }
- }
- /// <summary>
- /// 秒数
- /// </summary>
- private string second;
-
- public string Second
- {
- get { return second; }
- set { second = value;
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs("Second"));
- }
- }
- }
- /// <summary>
- /// 个数
- /// </summary>
- private int cOUNT;
-
- public int COUNT
- {
- get { return cOUNT; }
- set { cOUNT = value; }
- }
- /// <summary>
- /// 子项目名
- /// </summary>
- private string sTEPNAME;
-
- public string STEPNAME
- {
- get { return sTEPNAME; }
- set { sTEPNAME = value; }
- }
- //标准秒数
- private string sSecond;
-
- public string SSecond
- {
- get { return sSecond; }
- set
- {
- sSecond = value;
- if (PropertyChanged != null)
- {
- PropertyChanged(this, new PropertyChangedEventArgs("SSecond"));
- }
- }
- }
- }
-
- }
DATAgrid 绑定 行集合
先绑定Ml对象 在自定义控件内定义依赖属性 接受 在拆解对象
- /// <summary>
- /// 生成DataGrid 列
- /// </summary>
- void addColumn()
- {
- dataGrid.Columns.Clear();
- for (int i = 0; i < ListColumn.Count; i++)
- {
- //生成 列
- DataGridTemplateColumn dl = new DataGridTemplateColumn();
- //获得列头信息 格式 : 上下カップ押え_62s_B_4
- ColumnsViewModel model = ListColumn[i];
- dl.Header = model.Clm;
- //数据绑定
- Binding binding = new Binding()
- {
- Path = new PropertyPath("Ml["+i+"]")// 需绑定的数据源属性名
- ,
- Mode = BindingMode.OneWay// 绑定模式
- ,
- UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
- };
- //生成数据模板
- DataTemplate MyDataTemplate = new DataTemplate();
- //生成自定义控件
- var Item = new FrameworkElementFactory(typeof(ItemControl));
- Item.SetBinding(ItemControl.SetRGBProperty, binding); //数据绑定
- MyDataTemplate.VisualTree = Item;//注册可视树
- dl.CellTemplate = MyDataTemplate;//单元格模板注册
- dataGrid.Columns.Add(dl);
- }
- }
一定会有更好的办法 这个程序设计上是有问题的 数据太复杂 时间还少
开发也没时间思考 所以 很多人不愿意维护别人的代码
有好的设计模式 就给更新掉
WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)对象绑定
原文:https://www.cnblogs.com/lonelyxmas/p/12075409.html