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

​​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);
}
}

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

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

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