当前位置: 首页 > news >正文

WPF DataGrid 赋值与修改

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 方式去书写,需要定义对应的模型视图等等,数据处理全部在视图中进行。。。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 生活小助手系统小程序的设计
  • 灵当CRM系统index.php存在SQL注入漏洞
  • sicp每日一题[2.20]
  • MySQL基础基础篇 - SQL
  • 数据结构:内部排序
  • spark 面试题
  • Linux 防火墙:iptables (二)
  • JVM 一个对象是否已经死亡?
  • ubuntu64位系统无法运行32位程序的解决办法
  • 前后端分离,使用MOCK进行数据模拟开发,让前端攻城师独立于后端进行开发
  • 【HTTP】构造HTTP请求和状态码
  • 大数据新视界 --大数据大厂之AI 与大数据的融合:开创智能未来的新篇章
  • C++——模板初阶
  • 后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0920)
  • 十五、差分输入运算放大电路
  • ES6指北【2】—— 箭头函数
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【mysql】环境安装、服务启动、密码设置
  • Apache的80端口被占用以及访问时报错403
  • conda常用的命令
  • CSS盒模型深入
  • Java精华积累:初学者都应该搞懂的问题
  • node学习系列之简单文件上传
  • React Native移动开发实战-3-实现页面间的数据传递
  • spring + angular 实现导出excel
  • 代理模式
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 将回调地狱按在地上摩擦的Promise
  • 入门级的git使用指北
  • 什么软件可以剪辑音乐?
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 问题之ssh中Host key verification failed的解决
  • 一个JAVA程序员成长之路分享
  • 以太坊客户端Geth命令参数详解
  • 用 Swift 编写面向协议的视图
  • 正则表达式
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • # centos7下FFmpeg环境部署记录
  • #Linux(make工具和makefile文件以及makefile语法)
  • #QT项目实战(天气预报)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (23)Linux的软硬连接
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (k8s)Kubernetes本地存储接入
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程