~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术:MVVM

撰写时间:2021年06月26日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

首先要在view视图层添加一个空的DataGrid然后在DataGrid里面声明Loaded事件来触发表头数据,我这里是第一个表头是直接在View视图层中直接绑定表头的,从索引1开始就是在后台声明时间表头,下面来看下在View视图层的代码写法,在此只给了一个DataGrid表头如下:

在上图中的Loaded事件中,Command是事件的命令,CommandParameter是传递参数值,我们要把DataGrid给传递到ViewModel中来接收DataGrid以便来声明里面的表头Header,

先在ViewModel中写命令的属性-->再去声明一个方法来接收View视图层传递过来的DataGrid -->在这里我要实现的是根据日历来创建动态的时间表头Header数据,那么下面来看具体代码步骤:

  1. 先把View视图层传递过来的参数同类型转换下:DataGrid grid = datagird as DataGrid;
  2. 创建DataGrid的ItemsSource来接收后面创建的表头参数: grid.ItemsSource = GuestOrder;
  3. 因为是时间的表头数据,那么先是获取当前系统的时间:DateTime date = DateTime.Now;
  4. 用For循环来获取列名数据:for (int i = 0; i < GuestOrder.Count(); i++)
  5. 判断for循环中的i是否大于0,大于0就在当前的时间上加1,例如:今天是2021年1月9号 +

1那么就变成明天的日期2021年1月10日了:date = date.AddDays(1);

  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;

  1. 在时间判断外面写列的值,先创建模板:FrameworkElementFactory DataGridHeardTextblock = new FrameworkElementFactory(typeof(TextBlock));
  2. 创建好久赋值: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,

};

  1. 列的表头值:column.Header = date.ToString("yyyy-MM-dd") + dtWeek;
  2. 列值的控件:DataTemplate temp = new DataTemplate();
  3. 模板的创建(TextBlock):FrameworkElementFactory textblock = new      FrameworkElementFactory(typeof(TextBlock));
  4. 列头名称: textblock.Name = date.ToString("yyyy-MM-dd") + dtWeek;

15、最后就是赋值了:

temp.VisualTree = textblock;

column.CellTemplate = temp;

grid.Columns.Insert(1+ i, column);

  1. 行的值赋值的代码如下(就不具体讲了):

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表头相关推荐

  1. 关于使用DataGrid的ButtonColumn,动态添加DataGrid列,实现不定列n个文件的下载功能...

    一.使用DataGrid的ButtonColumn,动态添加DataGrid列,实现不定列n个文件的下载功能 在aspx页面中的代码如下: <asp:datagrid id="User ...

  2. easyui datagrid 表头固定(垂直滚动条)、列固定(水平滚动条)

    easyui datagrid 表头固定(垂直滚动条).列固定(水平滚动条),每页显示1000行 最近用多了easyui 之后还是觉得它的功能还是很强大的.它原有的功能就已经能够满足90%以上的界面需 ...

  3. dedecms后台怎么添加发布软件?织梦后台软件内容管理

    使用织梦cms有很多的功能,其中有一个是在dedecms后台添加发布软件,然后在前台大家可以直接下载软件,在织梦cms后台怎么添加发布软件呢?下面是织梦软件内容管理的主要操作步骤. 使用织梦cms有很 ...

  4. mysql 获取当前日期,前一天,后一天方法及时间格式化 wordpress 后台头部添加气泡通知

    wordpress 应用:wordpress 后台头部添加气泡通知 /*Add a link called 'My Link'... --------------------------------- ...

  5. WPF DataGrid 表头筛选

    我用DataGridExtensions 拓展包后,发现他筛选是进行内容变更后就直接筛选,这样会吃掉大量的内存,我想看看其他的方法或者它写有进行键盘回车再进行筛选,发现没找到(如果大佬了解的话,麻烦教 ...

  6. datagrid表头与内容不对应_斜线表头竟然如此简单,花上3分钟学习,从此告别低颜值报表...

    [温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! 在我们日常工作中,利用Excel制作表格时,经常会碰到以下情况: 表头需要两个或多个标题: 表头内容太多,一行显示影响表格 ...

  7. easyui datagrid 表头 sort 排序

    datagrid的点击列表头刷新,分为两种,一种是页面刷新,不涉及后台服务器数据,不会从新查询数据库,只会刷新当前页数据: 一种是服务器级刷新,会重新加载全部数据. 如果不需要自定义排序,可以直接使用 ...

  8. easyui datagrid表头 toolbar 固定

    当用到EasyUI中的 datagrid 时,设置 fit:true, 就会使表头跟toolbar固定,但是这个容器要设置固定的宽和高.

  9. TC工具后台模式_聊天能赚钱?来聊后台批量添加账号,伪装女性聊天赚钱内幕...

    前言:大家好,这里是黑灰经专栏,我们一直致力最新的网络项目.网络安全.新技术等领域. 之前和大家提过一对一的直播台子项目模式,虽然经过多次整顿.打击有所收敛,但依然改变不了它游走在灰带的事实.和一对一 ...

最新文章

  1. python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方、立方)、np.power函数默认返回整数格式、np.float_power函数默认返回浮点数
  2. 医生们说,AI不会取代我们!
  3. 在Oracle 11g中用看Oracle的共享内存段---------IPCS
  4. 大量SQL的解决方案——sdmap
  5. html5之MIME类型
  6. web.xml配置文件详解
  7. vj p1025题解
  8. 局域网中服务器群配置ssh免密
  9. dvm与art的区别_Android运行时– DVM与ART,AOT与JIT
  10. 主管好当:一不指点工作,二不检查工作,三不改正错误
  11. 数字电子技术反应时间测试电路(纯电路实现)
  12. Spark的调度系统
  13. EEPROM存储电路(M24C64芯片)
  14. 金沙滩开发板单片机学习笔记(2)
  15. 在Office 2013(64bit)下破解VBA工程密码
  16. Elasticsearch 分布式搜索引擎 -- 数据聚合(聚合的种类、DSL实现聚合、RestAPI实现聚合)
  17. 位运算:【leedcode:只出现一次的数字】
  18. 仿写天猫tmall首页
  19. 老闪创业那些事儿(9)——雏鹰计划(上)
  20. KeyTool 和 OpenSSL 相互转换 [转]

热门文章

  1. NUMA全称 Non-Uniform Memory Access,译为“非一致性内存访问”,积极NUMA内存策略
  2. C语言libcurl:RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议
  3. ncurses面板库:new_panel(),doupdate(),show_panel(),hide_panel(),move_panel(),del_panel()...
  4. python socket 主动断开_python之使用ctrl+c断开多线程(TcpSocketServer连接)出现端口占用的情况...
  5. netty大白话--字符串的收发(三)
  6. 数据可视化的图表实现
  7. 数学之贝叶斯分类的理解
  8. python修饰符用法_c#教程之C#语言中的修饰符汇总
  9. json 转换 java odl_JSON与JAVA数据的转换
  10. 常用的开源镜像网站收集与备忘