WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)对象绑定
原文: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);
-
}
-
}
一定会有更好的办法 这个程序设计上是有问题的 数据太复杂 时间还少
开发也没时间思考 所以 很多人不愿意维护别人的代码
有好的设计模式 就给更新掉
WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)对象绑定的更多相关文章
- WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)
原文:WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件) 因为项目需要 要实现这个~ 怎么实现画红框内容部分 田字格和上面Textbox 属于一个自定义控件 大 ...
- vue原生表格怎样实现动态列及表格数据下载
最近项目经常用到带有合并效果以及动态列的表格,而翻阅iview和element-ui官网没有找到合适的(也有可能自己的水平有限,不会改写),所以只好自己用原生表格写了一个,具体效果如下: 这个表格右侧 ...
- WPF - 多列ListView添加数据的多种方式
多列ListView: <ListView x:Name="listView"> <ListView.View> <GridView> < ...
- wpf ListBox或ListView等数据控件 绑定数据,最简单的方式
在网上很难找最简单的案例,都是一大片,看着都头疼: 试试举一反三,如果把结果赋给DataContext这个属性,那就前台需要绑定ItemsSource="{Binding}",请注 ...
- [置顶] DataGridView控件---绑定数据方法
DataGridView控件是在windows应用程中显示数据最好的方式,它只需要几行简短的代码就可以把数据显示给用户,同时又支持增.删.改操作.今天将自己总结的增加数据的方法总结分 ...
- [Phoenix] 八、动态列
摘要: 传统关系型数据库的动态列实现只能依赖逻辑层的设计实现,而Phoenix是HBase上的SQL层,借助HBase特性实现的动态列功能,具有高度的灵活性,告别业务逻辑层的复杂设计. 一.概要 动态 ...
- angular学习笔记(三)-视图绑定数据的两种方式
绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...
- python 类的绑定方法和非绑定方法
一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. class People: def __ ...
- Learning-Python【25】:绑定方法与非绑定方法
类中定义函数分为了两大类,绑定方法与非绑定方法,它们有一些特殊之处: 1.绑定方法特殊之处:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法:这个在面向对象第一篇第六 ...
随机推荐
- laravel开发大型电商网站之异常设计思路分析
令人讨厌的异常 提起异常,大家都很反感,当信心满满的写完一段代码,刷新页面发现上面写着大大的 Exception 是最心烦的时候了.模块给领导演示的时候,如果报了异常,也是最让人崩溃的时候了. 在一般 ...
- HTML入门(列表、表单、常用表单控件、浮动框架、iframe、 摘要与细节、度量标签)
一.列表 1.作用:默认显示方式为从上到下的显示数据 2.列表的组成 列表类型和列表项 3.列表的分类:有序列表 无序列表 自定义列表 无序列表语法为ul>li, 语法:ul代表列表,l ...
- Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'type' for exchange 'me
在启动RabbitMQ消费端的时候报错:Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol ...
- C++ --const修饰指针
const修饰指针 1.const修饰指针 (常量指针)常量的指针 const int *p = &a; const修饰的是*p(表示内容为常量),不是p(指针) 指针指向的地址可以改,但指针 ...
- LeetCode刷题191218
好多天没有更新了,今天有空,刷一道. 算法第5题 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: ...
- Redis和MongoDB区别
MongoDB 更类似 MySQL,支持字段索引.游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务.Redis 是一个开源(BSD许可)的,内存中的数据结 ...
- django之跨站请求伪造csrf
目录 跨站请求伪造 csrf 钓鱼网站 模拟实现 针对form表单 ajax请求 csrf相关的两个装饰器 跨站请求伪造 csrf 钓鱼网站 就类似于你搭建了一个跟银行一模一样的web页面 , 用户在 ...
- 强大的django-debug-toolbar,django项目性能分析工具
强大的django-debug-toolbar,django项目性能分析工具 给大家介绍一个用于django中debug模式下查看网站性能等其他信息的插件django-debug-toolbar 首先 ...
- R学习
R内容: R-1 基础 R-2 基础绘图 R-3 t分布--t置信区间--t检验 R-4 方差分析 R-5 相关分析-卡方分析 R-6 线性回归模型分析流程 R实战第7章 线性回归 逻辑回归 主成分分 ...
- mysql数据库基础SQL语句总结篇
常用的sql增删改查语句 创建数据库:create database db_name character set utf8;删除数据库:drop database db_name;切换数据库:use ...