原文: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);
-
}
-
}
一定会有更好的办法 这个程序设计上是有问题的 数据太复杂 时间还少
开发也没时间思考 所以 很多人不愿意维护别人的代码
有好的设计模式 就给更新掉