WPF动态列(DataGridTemplateColumn)绑定数据(自定义控件)
上面的使用动态对象加载的数据发现一个问题一个是卡二是对象数量得写死很不开心
最后使用对象方式也应该使用对象方式
因为业务需要我的datagird数据来源于俩个对象列头是一个,行和行内容是一个 不好的点是列行的数据匹配不好掌控因为业务问题数据库设计问题后期再修改成一个对象吧
行对象对象ColumnsViewModel 里包含行和行内容
Ml是行内容集合与列对应
usingSystem;usingSystem.Collections.Generic;usingSystem.Collections.ObjectModel;usingSystem.ComponentModel;usingSystem.Linq;usingSystem.Text;namespaceHDG_COMPLEX_INPUT.ViewMode{publicclassDataRowViewModel:INotifyPropertyChanged{publiceventPropertyChangedEventHandlerPropertyChanged;publicDataRowViewModel(){}//publicDataRowViewModel(stringname,stringjOb,stringclass_,intnum,List<DataViewModel>model,stringspID){Name=name;Class_=class_;JOb=jOb;Num=num;Ml=model;STEPID=spID;}privatestringsTAFFID;publicstringSTAFFID{get{returnsTAFFID;}set{sTAFFID=value;if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs("STAFFID"));}}}privatestringname;publicstringName{get{returnname;}set{name=value;if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs("Name"));}}}privateintnum;publicintNum{get{returnnum;}set{num=value;if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs("Num"));}}}privatestringclass_;publicstringClass_{get{returnclass_;}set{class_=value;if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs("Class_"));}}}privatestringjOb;publicstringJOb{get{returnjOb;}set{jOb=value;if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs("JOb"));}}}privateList<DataViewModel>ml;publicList<DataViewModel>Ml{get{returnml;}set{ml=value;if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs("Ml"));}}}}publicclassDataViewModel:INotifyPropertyChanged{publiceventPropertyChangedEventHandlerPropertyChanged;///<summary>///颜色///</summary>privatestringrPG;publicstringRPG{get{returnrPG;}set{rPG=value;if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs("RPG"));}}}///<summary>///秒数///</summary>privatestringsecond;publicstringSecond{get{returnsecond;}set{second=value;if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs("Second"));}}}///<summary>///个数///</summary>privateintcOUNT;publicintCOUNT{get{returncOUNT;}set{cOUNT=value;}}///<summary>///子项目名///</summary>privatestringsTEPNAME;publicstringSTEPNAME{get{returnsTEPNAME;}set{sTEPNAME=value;}}//标准秒数privatestringsSecond;publicstringSSecond{get{returnsSecond;}set{sSecond=value;if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs("SSecond"));}}}}}
DATAgrid绑定行集合
先绑定Ml对象 在自定义控件内定义依赖属性接受在拆解对象
///<summary>///生成DataGrid列///</summary>voidaddColumn(){dataGrid.Columns.Clear();for(inti=0;i<ListColumn.Count;i++){//生成列DataGridTemplateColumndl=newDataGridTemplateColumn();//获得列头信息格式:上下カップ押え_62s_B_4ColumnsViewModelmodel=ListColumn[i];dl.Header=model.Clm;//数据绑定Bindingbinding=newBinding(){Path=newPropertyPath("Ml["+i+"]")//需绑定的数据源属性名,Mode=BindingMode.OneWay//绑定模式,UpdateSourceTrigger=UpdateSourceTrigger.PropertyChanged};//生成数据模板DataTemplateMyDataTemplate=newDataTemplate();//生成自定义控件varItem=newFrameworkElementFactory(typeof(ItemControl));Item.SetBinding(ItemControl.SetRGBProperty,binding);//数据绑定MyDataTemplate.VisualTree=Item;//注册可视树dl.CellTemplate=MyDataTemplate;//单元格模板注册dataGrid.Columns.Add(dl);}}
一定会有更好的办法 这个程序设计上是有问题的数据太复杂 时间还少
开发也没时间思考 所以很多人不愿意维护别人的代码
有好的设计模式就给更新掉