简介:

问题:在WPF中,使用了ObservableCollection<T>作为dataGrid的数据源,发现更新数据的时候不会触发dataGrid的更新

By MaQaQ 2023-11-22

分析:

1、ObservableCollection 会在集合的元素添加、移除或者清空时才触发更新通知,对集合中元素的属性更改是不会触发通知的。

2、如果想在更新数据时触发通知,可以将 T类实现 INotifyPropertyChanged 接口,这样当其属性发生更改时,会触发通知并更新 dataGrid。

实现如下:

  1、xml中

  <DataGrid  x:Name="dataGrid"   ItemsSource="{Binding}" >

  2、cs中

  • 定义ObservableCollection<Model> memberData = new ObservableCollection<Model>();
  • Model定义如下:

public class Model : INotifyPropertyChanged
{
protected int id;
protected string name;
protected bool online;
protected bool registered;
public int ID { get => id; set => id = value; }
public string Name { get => name; set => name = value; }
public bool IsOnline
{
get => online;
set
{
if (online != value)
{
online = value;
OnPropertyChanged("IsOnline");
}
}
}
public bool IsRegistered
{
get => registered;
set
{
if (registered != value)
{
registered = value;
OnPropertyChanged("IsRegistered");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
  • 绑定dataGrid数据源:dataGrid.DataContext = memberData;
  • 更新memberData数据:

private void ElevatorChanged(Data.ElevatorModel model)
{
var result1 = memberData.Count == 0 ? null : memberData.Where(p => p.Name == model.Name).Count() == 0 ? null : memberData.Where(p => p.Name == model.Name).First();
if (result1 != null)
{
result1.ID = model.ID;
result1.Name = model.Name;
result1.IsOnline = model.IsOnline;
result1.IsRegistered = model.IsRegistered;
}
else
{
memberData.Add(model);
}
}

上述例子中,当IsOnline、IsRegistered更新或者memberData.Add(model)时,会触发通知并更新dataGrid的显示。

总结:

1、使用ObservableCollection会在集合的元素添加、移除或者清空时才触发更新
2、使用INotifyPropertyChanged 接口会在属性发生更改时触发通知

WPF-dataGrid动态更新的更多相关文章

  1. WPF中动态更新TextBlock文字中的超链接,文本

    1.------------------------------------------------------------------------- 修改超链接的文本文字: <TextBloc ...

  2. WPF Datagrid 动态生成列 并绑定数据

    原文:WPF Datagrid 动态生成列 并绑定数据 说的是这里 因为列头是动态加载的 (后台for循环 一会能看到代码) 数据来源于左侧列 左侧列数据源 当然num1 属于临时的dome使用  可 ...

  3. WPF datagrid 动态增加列

    DataGrid动态增加列 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.m ...

  4. Wpf DataGrid动态添加列,行数据(二)

    这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...

  5. Wpf DataGrid动态添加列,行数据(一)

    由于最近有这方面的需求,而且刚接触wpf不久,在网上找了很多方法,都不是使用MVVM模式的,因为DataGrid的列不能绑定 这就难受了,我想了个折中的方法,这个是使用了MVVMLight的消息机制, ...

  6. WPF DataGrid 增加"更新"模板列,根据行Row的选择而显示"更新"按钮

    SelectionMode="Single" <DataGridTemplateColumn Header=""> <DataGridTemp ...

  7. WPF DataGrid动态生成列的单元格背景色绑定

    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Column.DisplayInde ...

  8. WPF柱状图(支持数据库动态更新)

    之前我们讲到wpf组件基类以及组件开发,现在我们围绕之前的内容去开发一个组件. 效果图请加群查看,在群共享里面. 做出这个呢  是比较繁琐的. 首先要使用我们的基类 继承基类的模板自动生成如下几个文件 ...

  9. WPF柱状图(支持数据库动态更新)之组件的数据动态化

    WPF柱状图(支持数据库动态更新) 在这片文章中我们介绍了如何将柱状图包装成一个组件,将这个组件的属性对外开放和组件的外部属性根内部属性绑定以及非轮询动态更新数据的方式. 非轮询更新数据感觉介绍的不够 ...

  10. 编写 WPF DataGrid 列模板,实现更好的用户体验

    Julie Lerman 下载代码示例 最近我在为一个客户做一些 Windows Presentation Foundation (WPF) 方面的工作. 虽然我提倡使用第三方工具,但有时也会避免使用 ...

随机推荐

  1. Scala 传名参数和传值参数

    1 package com.atguigu.chapter04 2 3 object ControlAbstraction { 4 def main(args: Array[String]): Uni ...

  2. Matplotlib绘图设置--- 图例设置

    plt.legend()和ax.legend()参数设置 自动会将每条线的标签与其风格.颜色进行匹配. plt.legend(*args, **kwargs) Place a legend on th ...

  3. Matplotlib绘图设置---坐标轴上下限/标题设置

    坐标轴上下限设置 plt.plot(x, np.sin(x)) #设置坐标轴上下限 plt.xlim(-1, 11) plt.ylim(-1.5, 1.5) plt.plot(x, np.sin(x) ...

  4. 掌上新闻随心播控,HarmonyOS SDK助力新浪新闻打造精致易用的资讯服务新体验

    原生智能是HarmonyOS NEXT的核心亮点之一,依托HarmonyOS SDK丰富全面的开放能力,开发者只需通过几行代码,即可快速实现AI功能.新浪新闻作为鸿蒙原生应用开发的先行者之一,从有声资 ...

  5. HarmonyOS属性动画开发示例(ArkTS)

      介绍 利用ArkUI组件不仅可以实现属性变化引起的属性动画,也可以实现父组件状态变化引起子组件产生动画效果,这种动画为显式动画.效果如图所示: 相关概念 显式动画:提供全局animateTo显式动 ...

  6. Scrapy 基础入门

    0x01 框架概述 Scrapy 是基于 Python 的一个非常流行的网络爬虫框架,可以用来抓取 Web 站点并从页面中提取结构化的数据 (1)核心组件 引擎:用来控制整个系统的数据处理流程 调度器 ...

  7. Matlab绘图(2)通过代码进行局部放大绘图、多文件绘图

    Matlab进阶绘图 在这次的绘图练习中,我们需要考虑一次性将所有数据文件逐一读入,然后对每幅图图片进行放大处理. 参数设置 这里包括每幅图的标题,图例,读入文件的名称,等等 title_d = {' ...

  8. JS - JavaScript 主要知识点(基础夯实)

    纲要 基本类型和引用类型 类型判断 强制类型转换 作用域 执行上下文 理解函数的执行过程 this 指向 闭包 原型和原型链 js 的继承 event loop 基本类型和引用类型 js中数据类型分为 ...

  9. vue 商品sku添加,笛卡尔算法,商品添加。动态生成table,table添加值后 再生成的table 不改变table之前输入的值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 【笔记】报错:numeric or value error: character to number conversion error

    报错:numeric or value error: character to number conversion error 报错如下: 数据库操作错误."2327,13619/v1:65 ...