MVVM后台ViewModel添加DataGrid表头
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:MVVM
撰写时间:2021年06月26日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
首先要在view视图层添加一个空的DataGrid然后在DataGrid里面声明Loaded事件来触发表头数据,我这里是第一个表头是直接在View视图层中直接绑定表头的,从索引1开始就是在后台声明时间表头,下面来看下在View视图层的代码写法,在此只给了一个DataGrid表头如下:
在上图中的Loaded事件中,Command是事件的命令,CommandParameter是传递参数值,我们要把DataGrid给传递到ViewModel中来接收DataGrid以便来声明里面的表头Header,
先在ViewModel中写命令的属性-->再去声明一个方法来接收View视图层传递过来的DataGrid -->在这里我要实现的是根据日历来创建动态的时间表头Header数据,那么下面来看具体代码步骤:
- 先把View视图层传递过来的参数同类型转换下:DataGrid grid = datagird as DataGrid;
- 创建DataGrid的ItemsSource来接收后面创建的表头参数: grid.ItemsSource = GuestOrder;
- 因为是时间的表头数据,那么先是获取当前系统的时间:DateTime date = DateTime.Now;
- 用For循环来获取列名数据:for (int i = 0; i < GuestOrder.Count(); i++)
- 判断for循环中的i是否大于0,大于0就在当前的时间上加1,例如:今天是2021年1月9号 +
1那么就变成明天的日期2021年1月10日了:date = date.AddDays(1);
- 如果你想要把星期也加到日期的后面的话,可以这样写:time = date.DayOfWeek.ToString();先获取当前是星期几,再用Switch来获取判断星期几最后把它赋值,如下:
switch (time) {
case "Monday":
week = "星期一";
break;
case "Tuesday":
week = "星期二";
break;
case "Wednesday":
week = "星期三";
break;
case "Thursday":
week = "星期四";
break;
case "Friday":
week = "星期五";
break;
case "Saturday":
week = "星期六";
break;
case "Sunday":
week = "星期日";
break; }
dtWeek = week;
- 在时间判断外面写列的值,先创建模板:FrameworkElementFactory DataGridHeardTextblock = new FrameworkElementFactory(typeof(TextBlock));
- 创建好久赋值:DataGridHeardTextblock.SetValue(TextBlock.TextProperty, date.ToString("yyyy-MM-dd") + " " + dtWeek);date.ToString("yyyy-MM-dd") + " " + dtWeek这个是列头的内容
9、接下来就是列头的样式了(可写可不写,想要漂亮点样式就可以直接来根据下面的代码来调):
DataGridHeardTextblock.SetValue(TextBlock.TextWrappingProperty, TextWrapping.Wrap);//换行
DataGridHeardTextblock.SetValue(TextBlock.TextAlignmentProperty, TextAlignment.Center);//居中
DataGridHeardTextblock.SetValue(TextBlock.WidthProperty, 90d);//宽度
10、实例化描述数据对象的可视结构:
DataTemplate HeaderTemplate = new DataTemplate { VisualTree = DataGridHeardTextblock };
DataGridTemplateColumn column = new DataGridTemplateColumn()
{
HeaderTemplate = HeaderTemplate,
};
- 列的表头值:column.Header = date.ToString("yyyy-MM-dd") + dtWeek;
- 列值的控件:DataTemplate temp = new DataTemplate();
- 模板的创建(TextBlock):FrameworkElementFactory textblock = new FrameworkElementFactory(typeof(TextBlock));
- 列头名称: textblock.Name = date.ToString("yyyy-MM-dd") + dtWeek;
15、最后就是赋值了:
temp.VisualTree = textblock;
column.CellTemplate = temp;
grid.Columns.Insert(1+ i, column);
- 行的值赋值的代码如下(就不具体讲了):
DataGridTemplateColumn C1 = grid.Columns[1 + i] as DataGridTemplateColumn;
FrameworkElement framework1 = grid.Columns[1 + i].GetCellContent(grid.Items[0]);
TextBlock block1 = C1.CellTemplate.FindName(date.ToString("yyyy-MM-dd") + dtWeek, framework1) as TextBlock;
block1.HorizontalAlignment = HorizontalAlignment.Center;
block1.VerticalAlignment = VerticalAlignment.Center;
block1.Text = “26”;
最后来看下结果图,后面的时间和星期都是后台生成:(如讲解有错请见谅!)
MVVM后台ViewModel添加DataGrid表头相关推荐
- 关于使用DataGrid的ButtonColumn,动态添加DataGrid列,实现不定列n个文件的下载功能...
一.使用DataGrid的ButtonColumn,动态添加DataGrid列,实现不定列n个文件的下载功能 在aspx页面中的代码如下: <asp:datagrid id="User ...
- easyui datagrid 表头固定(垂直滚动条)、列固定(水平滚动条)
easyui datagrid 表头固定(垂直滚动条).列固定(水平滚动条),每页显示1000行 最近用多了easyui 之后还是觉得它的功能还是很强大的.它原有的功能就已经能够满足90%以上的界面需 ...
- dedecms后台怎么添加发布软件?织梦后台软件内容管理
使用织梦cms有很多的功能,其中有一个是在dedecms后台添加发布软件,然后在前台大家可以直接下载软件,在织梦cms后台怎么添加发布软件呢?下面是织梦软件内容管理的主要操作步骤. 使用织梦cms有很 ...
- mysql 获取当前日期,前一天,后一天方法及时间格式化 wordpress 后台头部添加气泡通知
wordpress 应用:wordpress 后台头部添加气泡通知 /*Add a link called 'My Link'... --------------------------------- ...
- WPF DataGrid 表头筛选
我用DataGridExtensions 拓展包后,发现他筛选是进行内容变更后就直接筛选,这样会吃掉大量的内存,我想看看其他的方法或者它写有进行键盘回车再进行筛选,发现没找到(如果大佬了解的话,麻烦教 ...
- datagrid表头与内容不对应_斜线表头竟然如此简单,花上3分钟学习,从此告别低颜值报表...
[温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! 在我们日常工作中,利用Excel制作表格时,经常会碰到以下情况: 表头需要两个或多个标题: 表头内容太多,一行显示影响表格 ...
- easyui datagrid 表头 sort 排序
datagrid的点击列表头刷新,分为两种,一种是页面刷新,不涉及后台服务器数据,不会从新查询数据库,只会刷新当前页数据: 一种是服务器级刷新,会重新加载全部数据. 如果不需要自定义排序,可以直接使用 ...
- easyui datagrid表头 toolbar 固定
当用到EasyUI中的 datagrid 时,设置 fit:true, 就会使表头跟toolbar固定,但是这个容器要设置固定的宽和高.
- TC工具后台模式_聊天能赚钱?来聊后台批量添加账号,伪装女性聊天赚钱内幕...
前言:大家好,这里是黑灰经专栏,我们一直致力最新的网络项目.网络安全.新技术等领域. 之前和大家提过一对一的直播台子项目模式,虽然经过多次整顿.打击有所收敛,但依然改变不了它游走在灰带的事实.和一对一 ...
最新文章
- python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方、立方)、np.power函数默认返回整数格式、np.float_power函数默认返回浮点数
- 医生们说,AI不会取代我们!
- 在Oracle 11g中用看Oracle的共享内存段---------IPCS
- 大量SQL的解决方案——sdmap
- html5之MIME类型
- web.xml配置文件详解
- vj p1025题解
- 局域网中服务器群配置ssh免密
- dvm与art的区别_Android运行时– DVM与ART,AOT与JIT
- 主管好当:一不指点工作,二不检查工作,三不改正错误
- 数字电子技术反应时间测试电路(纯电路实现)
- Spark的调度系统
- EEPROM存储电路(M24C64芯片)
- 金沙滩开发板单片机学习笔记(2)
- 在Office 2013(64bit)下破解VBA工程密码
- Elasticsearch 分布式搜索引擎 -- 数据聚合(聚合的种类、DSL实现聚合、RestAPI实现聚合)
- 位运算:【leedcode:只出现一次的数字】
- 仿写天猫tmall首页
- 老闪创业那些事儿(9)——雏鹰计划(上)
- KeyTool 和 OpenSSL 相互转换 [转]
热门文章
- NUMA全称 Non-Uniform Memory Access,译为“非一致性内存访问”,积极NUMA内存策略
- C语言libcurl:RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议
- ncurses面板库:new_panel(),doupdate(),show_panel(),hide_panel(),move_panel(),del_panel()...
- python socket 主动断开_python之使用ctrl+c断开多线程(TcpSocketServer连接)出现端口占用的情况...
- netty大白话--字符串的收发(三)
- 数据可视化的图表实现
- 数学之贝叶斯分类的理解
- python修饰符用法_c#教程之C#语言中的修饰符汇总
- json 转换 java odl_JSON与JAVA数据的转换
- 常用的开源镜像网站收集与备忘