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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小慧哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值