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