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

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


http://www.kler.cn/a/313039.html

相关文章:

  • GitLab实现 HTTP 访问和 SMTP 邮件发送
  • 【机器学习】机器学习中用到的高等数学知识-3.微积分 (Calculus)
  • layui 文件上传前检查文件大小,后面再点上传出现重复提交的问题
  • 华为网络设备这些“危险命令”,切记不能瞎操作!
  • 【黑马Redis原理篇】Redis数据结构
  • VMWareTools安装及文件无法拖拽解决方案
  • Spring Boot利用dag加速Spring beans初始化
  • 无人机黑飞打击技术详解
  • 页面关键路径渲染详解
  • Python中使用Scikit-learn进行线性回归分析的实用指南
  • API应用安全风险倍增,F5助企业赢得关键安全挑战
  • esp32s3 NVS空间读写操作
  • Java 每日一刊(第13期):this super static
  • 【Redis入门到精通三】Redis核心数据类型(List,Set)详解
  • Qt 中 `QTimer`定时器的使用方法详解
  • 蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,游卡,oppo,康冠科技,途游游戏,埃科光电25秋招内推
  • Java并发集合框架:高效多线程数据访问
  • Flask 实现用户登录功能的完整示例:前端与后端整合(附Demo)
  • ubuntu 20.04 ‘Wired Unmanaged‘ 网络无法配置解决方法
  • 政务安全运营核心能力模块
  • Stable Diffusion绘画 | ControlNet应用-instant-ID控制器:快速生成人物多角度图片
  • 大模型——LLaVA和LLaMA的介绍和区别
  • redis-shake v4全量增量同步redis数据
  • 海康VM脚本中使用opencvsharp和halcon
  • HelpLook VS GitBook,在线文档管理工具对比
  • 【工具变量】科技金融试点城市DID数据集(2000-2023年)