WPF DataGrid 赋值与修改

news/2024/12/23 5:15:53/

WPF DataGrid 赋值与修改

下方绑定给 DataGrid 控件的类模型
public record DataGridModel{public string GongNeng{get; set;}public DataGridModel(string gongNeng){GongNeng = gongNeng;}}

一、DataGrid 绑定对应的属性

DataGrid 绑定列,将对应的属性绑定给对应的列
写法:Binding="{Binding 属性名}"  
<DataGrid.Columns><!--ElementStyle 设置元素样式--><DataGridTextColumn Header="功能" Width="*" Binding="{Binding GongNeng}"></DataGridTextColumn>
</DataGrid.Columns>

二、为 DataGrid 赋值

方法一
  再 cs 文件中直接给对应的 DataGrid 控件赋数据源

...
public List<DataGridModel> DataGridModels { get; set; }
...
//我这里 DataGrid 控件 Name 为 main_datagrid_display
main_datagrid_display.ItemsSource = DataGridModels;
...

方法二:
  再 xaml 文件中直接给对应的 DataGrid 控件赋数据源
  情况一:
   ItemsSource=“{Binding RelativeSource={RelativeSource AncestorType=对应数据源路径},Path=对应数据源名称}”
   如果这里数据源在父类、或者父类的父类、或者其他类中等等,需要将对应的路径指定正确

<DataGrid Name="main_datagrid_display" Width="1268" Height="193"  ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=local:MainBody},Path=DataGridModels}">
...            
</DataGrid>

情况二:
  ItemsSource=“{Binding 对应数据源名称}”
  情况一简写写法,但是必须在 cs 文件中加上
    this.DataContext = 对应数据源路径;
  正常情况下,我们会书写一个视图,将所有的数据处理都放在那个视图当中,这时数据源属性也会定义在该视图中,所有对数据的操作也会在该视图中,但是需要将 this.DataContext 赋值为该视图对象

在这里插入代码片```csharp
//cs 文件
InitializeComponent();
//一般写在 InitializeComponent() 方法下面,我这里没有使用 MVVM 模式,所有的数据处理都在该 cs 文件中,所以指定为 this
this.DataContext =  this;
//xaml 文件
<DataGrid Name="main_datagrid_display" Width="1268" Height="193"  ItemsSource="{Binding DataGridModels}">
</DataGrid>

三、修改 DataGrid 数据

  当内部数据源修改时,如果需要前端页面也跟着一起修改,需要继承 INotifyPropertyChanged 接口,并实现 PropertyChanged 事件
  我们这里对上面的类模型进行修改:

public record DataGridModel : INotifyPropertyChanged
{private string _gongNeng;public string GongNeng{get { return _gongNeng; }set{if (value != _gongNeng){_gongNeng = value;if (null != PropertyChanged){PropertyChanged(this, new PropertyChangedEventArgs("GongNeng"));//当被改变时,告知前端页面}}}}public DataGridModel(string gongNeng){GongNeng = gongNeng;}public event PropertyChangedEventHandler? PropertyChanged;//实现 PropertyChanged 事件}

  如果绑定的属性是一个集合的话,也可以使用 WPF 自带的 ObservableCollection 集合,其内部帮我们实现了 INotifyCollectionChanged, INotifyPropertyChanged,当后台数据改变时,会自动帮我们更新前端的数据。
    但是使用 ObservableCollection 需要注意要为其初始化一个对象,否则会出现后端数据变了,前端数据不变化的情况,且 ObservableCollection 只有在新增或者删除一条数据的时候,才回去通知前端

ObservableCollection<string> Test { get; set; } = new ObservableCollection<string>();//需要为其初始化

  上述均是前后端不分离的情况,如果使用 MVVM 方式去书写,需要定义对应的模型视图等等,数据处理全部在视图中进行。。。


http://www.ppmy.cn/news/1528401.html

相关文章

07_Python数据类型_集合

Python的基础数据类型 数值类型&#xff1a;整数、浮点数、复数、布尔字符串容器类型&#xff1a;列表、元祖、字典、集合 集合 集合&#xff08;set&#xff09;是Python中一个非常强大的数据类型&#xff0c;它存储的是一组无序且不重复的元素&#xff0c;集合中的元素必须…

css实现居中的方法

水平居中 1. 行内设置text-align 给父元素设置text-align为center&#xff0c;一般用于实现文字水平居中 2. 给当前元素设置margin&#xff1a;0 auto 原理&#xff1a;块级独占一行&#xff0c;表现为在水平方向上占满整个父容器&#xff0c;当水平方向padding&#xff0c;…

2.Seata 1.5.2 集成Springcloud-alibaba

一.Seata-server搭建已完成前提下 详见 Seata-server搭建 二.Springcloud 项目集成Seata 项目整体测试业务逻辑是创建订单后&#xff08;为了演示分布式事务&#xff0c;不做前置库存校验&#xff09;&#xff0c;再去扣减库存。库存不够的时候&#xff0c;创建的订单信息数…

Lua发邮件:实现自动化邮件发送教程指南!

Lua发邮件高级技巧有哪些&#xff1f;如何利用Lua发送电子邮件&#xff1f; 自动化邮件发送是一个非常实用的功能&#xff0c;广泛应用于各种场景&#xff0c;如通知、提醒、报告生成等。Lua作为一种轻量级脚本语言&#xff0c;因其简洁和高效而受到广泛欢迎。AokSend将详细介…

JVM OutOfMemoryError 与 StackOverflowError 异常

目录 前言 堆溢出 虚拟机栈和本地方法栈溢出 方法区溢出 前言 JVM规范中规定, 除了程序计数器之外, 其他的运行时数据区域, 例如堆栈, 方法区, 都会出现OutOfMemoryError异常. 那么到底是怎么样的代码, 才会引起堆溢出, 栈溢出, 或者是方法区的溢出呢? 如果遇到了又该如何…

“华为杯”第十二届中国研究生数学建模竞赛-D题:面向节能的单/多列车优化决策问题研究(续)(附MATLAB代码实现)

目录 5.2.3 结果分析 5.3 列车延误优化控制模型 5.3.1 模型建立 5.3.2 模型求解 5.3.3 结果分析 6 模型的评价与推广 6.1 模型的优点 6.2 模型的缺点 6.3 模型的推广 参考文献 代码实现 第一题主要程序 第二题主要程序 本文篇幅较长,分为上下两篇,上篇详见面向节能的单/多列车…

传输大咖44 | 云计算企业大数据迁移如何更安全高效?

在云计算时代&#xff0c;数据已成为企业最宝贵的资产之一。对于依赖云服务的企业和组织来说&#xff0c;大数据迁移是实现业务扩展和优化的关键步骤。然而&#xff0c;这一过程并非没有挑战。传统的文件传输方式在安全性、稳定性和速度上往往无法满足云计算企业的需求。本文将…

OpenAI或于9月24日发布ChatGPT高级语音模式

&#x1f989; AI新闻 &#x1f680; OpenAI或于9月24日发布ChatGPT高级语音模式 摘要&#xff1a;科技媒体报道&#xff0c;OpenAI计划在9月24日进一步推广ChatGPT的高级语音模式&#xff0c;预计将正式发布。该模式于7月向部分ChatGPT Plus用户开放&#xff0c;提供更为真实…