首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

绑定到ObservableCollection的DataGrid在值更改后不会立即更新

问题描述:绑定到ObservableCollection的DataGrid在值更改后不会立即更新。

回答: 这个问题通常出现在WPF或者其他类似的XAML技术中。当我们将DataGrid绑定到ObservableCollection时,DataGrid会自动更新显示其所绑定的数据。然而,有时候当我们更改ObservableCollection中的某个元素的属性时,DataGrid并不会立即更新对应的单元格。

造成这个问题的原因是ObservableCollection仅会在集合中元素的添加、删除或者重新分配时触发CollectionChanged事件,而不会在元素的属性更改时触发。因此,当我们更改ObservableCollection中元素的属性时,DataGrid不会立即更新。

解决这个问题的方法有两种:

  1. 使用INotifyPropertyChanged接口:在绑定的类中实现INotifyPropertyChanged接口,并在属性更改时触发PropertyChanged事件。这样,当我们更改ObservableCollection中元素的属性时,DataGrid会立即检测到属性的更改并更新相应的单元格。
  2. 使用RelayCommand或者其他命令模式:在属性更改时,通过命令模式触发一个更新操作。这样,当我们更改ObservableCollection中元素的属性时,可以手动触发更新操作,从而更新DataGrid。

对于第一种方法,我们可以按照以下步骤操作:

  1. 在绑定的类中实现INotifyPropertyChanged接口。
  2. 在属性的setter方法中,调用PropertyChanged事件,通知属性更改。
  3. 在XAML中,将DataGrid绑定到ObservableCollection的集合。

这样,当ObservableCollection中元素的属性更改时,DataGrid会立即更新。

以下是一个简单示例:

代码语言:txt
复制
public class Person : INotifyPropertyChanged
{
    private string name;

    public string Name
    {
        get { return name; }
        set
        {
            if (name != value)
            {
                name = value;
                OnPropertyChanged("Name");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

public class ViewModel
{
    public ObservableCollection<Person> People { get; set; }

    public ViewModel()
    {
        People = new ObservableCollection<Person>()
        {
            new Person() { Name = "John" },
            new Person() { Name = "Jane" }
        };
    }
}

在XAML中,将DataGrid绑定到ObservableCollection的集合:

代码语言:txt
复制
<DataGrid ItemsSource="{Binding People}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
    </DataGrid.Columns>
</DataGrid>

这样,当ObservableCollection中Person对象的Name属性更改时,DataGrid会立即更新对应的单元格。

腾讯云相关产品推荐:腾讯云云服务器(ECS)链接地址

请注意,此回答中未提及其他云计算品牌商,如有需要请提供更具体的问题和背景信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#-datagrid使用

基本用法 使用`ItemsSource`绑定数据源,后台构造数据源,双向绑定模式下,数据变化时可反应到界面,界面的数据更改也能应用到数据源。...{math}"; } } } 改变行颜色 通过Style设置颜色,结合触发器我们可以按照一定条件改变行颜色,比如选中行时,获取鼠标移入行内时,代码如下...> 通过表格改变行颜色 我们可以通过转换器IValueConverter 或者IMultiValueConverter获取到数据,然后根据你想要条件进行颜色返回。...; using System.Windows.Media; namespace Demo.Common { /// /// 绑定多参数转换器 /// <...,我们获取到当前行信息,然后启用拖放操作,将行放置目标行上时,我们改变数据源顺序即可,参考代码如下: //datagrid控件上启用拖拽,并添加事件 AllowDrop="True" PreviewMouseMove

82200

WPF --- 如何以Binding方式隐藏DataGrid

引言 如题,如何以Binding方式动态隐藏DataGrid列?...方式,更改为指定 ElementName获取元素方式,也一样不生效。...首先该对象必须是 DependencyObject 类型或其子类,这样才能使用依赖属性 Xaml 进行绑定,其次必须有属性变化通知功能,这样才能触发 VisibilityConverter,实现预期功能...摘取部分官方解释如下: 从文档中可以看出 Freezable 非常符合我们想要,第一它本身继承 DependencyObject 且它在子属性值更改时能够提供变化通知。...该抽象类是 DependencyObject 子类,能使用依赖属性 Xaml 进行绑定,且有属性变化通知功能,触发 VisibilityConverter转换器,实现了预期功能。

39810

Silverlight:双向绑定综合应用-多集合依赖绑定

这是上一篇“Silverlight:双向绑定综合应用-自动更新集合汇总字段”续篇。需求场景如下: 一个公司,有N个员工,逢年过节时要搞一些抽奖活动,最终要公告收奖名单。...”必须从公司员工中选取,如果发现某位员工公司员工库里没有登记,也可以在这个界面上员工列表中临时添加。...即:下面网格中员工“姓名下拉框”数据来源,依赖于上面网格中员工姓名记录。...(类似数据库中主从表关系) 为了实现这种绑定,需要创建二个ViewModel类 EmployeePrizeViewModel类,用来实现下面一个网格绑定,代码如下: using System.ComponentModel.../// 公司"员工集合" /// public ObservableCollection EmployeeCollection

85160

C# WPF数据绑定方法以及重写数据模板数据绑定

写在前面 本文将会介绍WPF如何实现前后端数据绑定和在进行数据绑定时常用方法和类以及对于DataGrid、ListView这样控件重写数据模板控件如何进行数据绑定。...---- 一、实现前后端数据绑定: 说到前后端数据绑定,就需要先说一下WPFMVVM设计模式,它是由传统MVC设计模式改进而来,不同点在于MVVM数据源更新不需要一个Controller控制器来向前台同步数据...1.数据源:数据绑定是通过ViewModel作为数据源,绑定前台xaml进行实现。通过后台对于数据源修改,可以将内容直接同步前台界面上。可以详见上面数据删除和添加以及修改Text实例。...3.数据模板重写:本实例中重写了DataGrid控件中电话一列和删除一列数据模板,我们可以看到电话一列重写为了TextBox删除一列重写为了Button,表头也可以进行数据模板重写。...4.双向绑定:顾名思义绑定是双向,不仅仅是后台数据更新自动同步前台,同时前台数据更新也会自动同步后台。

55940

【我们一起写框架】MVVMWPF框架(三)—数据控件

可以看到,处理存贮数据DataContent属性之外,还创建了一些管理UI属性IsEnabled、IsReadOnly、Visibility。 父类数据控件创建完成,我们开始创建子类数据控件。...中定义了ChangeTextBox属性,然后再Xaml中绑定了ChangeTextBox属性TextUI控件TextBoxText属性上,这样我们就实现了数据联动。...因为WPFUI控件被创建以后,要被添加到视觉树中,所以最终会被显示屏幕上是包裹着控件视觉树;其中视觉树与控件是可以分离;比如控件中绑定数据是10行,而视觉树可以显示3行。...因为DataGrid数据控件是所有数据控件中最复杂,而且代码量特别多;所以,我决定,单拿出一篇来介绍DataGrid。 框架代码已经传到Github上了,并且会持续更新。...相关文章: 【我们一起写框架】MVVMWPF框架(一)—序篇 【我们一起写框架】MVVMWPF框架(二)—绑定 To be continued——DataGrid Github地址:https://

2.3K30

C# 扩展集合ObservableCollection使集合在添加、删除、变更触发事件

01 概述 ObservableCollection继承了INotifyPropertyChanged接口,属性变更时可以通知界面,当我把ObservableCollection集合绑定界面的...DataGrid,我希望界面修改表格数值,可以触发一个 事件来验证我界面设定数据有效性,但是对于集合添加、删除只会触发集合get属性,重置不会触发集合get、set属性,这时候我们就需要扩展...ObservableCollection集合. 02 集合扩展 代码如下:重写OnCollectionChanged方法,使得集合改变(增添、删除、改变)时拥有属性变更事件 using System;...{ public class ItemsChangeObservableCollection : System.Collections.ObjectModel.ObservableCollection...StudentList_OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { MessageBox.Show("当前触发事件是

1.5K10

【我们一起写框架】MVVMWPF框架(四)—DataGrid

实战架构中,并不是UI东西都一定要放在UI层写,逻辑东西放在逻辑层写。因为,架构目的是让程序员更好写代码,而不是让代码死死固定在某一层。...因为,当一个坏代码出现,马上就会有若干个类似的坏代码出现,犹如劣币逐良币一样,时间一长,框架就会被破坏。 接着好代码就得依赖着坏代码写。 当坏代码多了一定程度,好代码就会变成Bug了。。。...因为数据控件通过绑定UI控件,已经将复杂UI操作,变成了简单数据逻辑操作了。 如果没有数据控件,那当我们实现一个控件联动时,就得Xaml.cs文件中处理了。...所以,当然我们学习了DataGrid数据控件,就可以更好理解,数据控件意义了。...DataGrid中级应用 我们在上面的代码中可以看到,DataGrid数据控件还包含了分页功能。那么如何实现分页功能呢。 很简单,我们只需要在Xaml页面多绑定几个属性即可实现。

1.1K20

Freezable ---探索Freezable承载数据原理

引言 之前写一篇文章【WPF --- 如何以Binding方式隐藏DataGrid列】中,我先探索了 DataGridTextColumn 为什么不在可视化树结构内?...又给出了解决方案,使用 Freezable ,该抽象类是 DependencyObject 子类,能使用依赖属性 Xaml 进行绑定,它承载了 DataContext 且有属性变化通知功能,触发 VisibilityConverter...; } set { persons = value; OnPropertyChanged(); } } } 源码剖析 源码剖析之前,如果大家还不会如何使用VS调试.Net源码...接下来,程序启动之前,我们 CustomFreezable 重载方法 OnChanged() 设置断点,然后使用VS调试源码,查看调用堆栈: 可以看到,从 InitDataGrid() 开始,属性变化触发变化事件...原因就是 FindResource 方法中,如果要查询资源是Freezable类型,则会将当前资源 DataContent Visual 绑定 InheritanceContext,所以Freezable

15810

WPF NET5 Prism8.0升级指南

(7.2)版本,而现在也发布了.NET5和最新Prism8.0.0.1909(8.0)版本,因此同样我想将之前Prism Demo项目可以升级最新,写这篇文章目的是自己也能学习一番,而更多是回答那些我...这里可能不会讲述所有关于Prism8.0更新全部细节,只是我认为可能主要一些功能,我们可以看到Prism8.0相比Prism7.2,Prism.WPF中去除了System.Windows.Interactivity...Prism8.0可能会发生报错,而我目的则是一篇更新指南,关于Prism8.0更新全部细节,可以看官方githubPrism8.0ReleaseNote,这里还推荐dino.c大佬有关Prism8.0...> ViewModel简化代码: private ObservableCollection _allMedicines=new ObservableCollection...,同样也确实不会出现跨线程问题(非UI线程操作ObservableCollection集合会出现),关于async awaitWPF不会出现跨线程问题,可以参考我另外一篇文章异步函数async

2.7K40

【愚公系列】2023年10月 WPF控件专题 DataGrid控件详解

DataGrid可以与各种数据源进行绑定,如数据表、XML文件、对象集合等,并且可以进行列自定义、排序、过滤和分组等操作。...数据编辑:DataGrid控件可以支持数据编辑,包括单元格编辑、行编辑和列编辑等方式,方便用户对数据进行修改和更新。...数据导入导出:DataGrid控件可以支持数据导入和导出,可以将数据快速地导入DataGrid中进行展示,也可以将DataGrid数据导出到其他文件格式中,方便数据共享和使用。...StudentDialogViewModel中,我们使用了一个私有字段_student来存储传入Student对象,以及一些属性来绑定StudentDialog控件,属性setter中通知界面更新...StudentDialogViewModel中,我们还定义了两个RelayCommand,分别绑定OK和Cancel按钮点击事件,并在Close方法中关闭窗口并返回结果。

1.1K00

Silverlight Telerik控件学习:GridView双向绑定

做过WinForm数据库开发的人,一定有类似经历:DataGrid绑定,如果允许行编辑,数据一顿修改,想批量保存修改结果,通常是将DataGrid所有行遍历,用FindControl找出其中...TextBox之类控件,取值,然后处理,如果行模板中控件变化了,可能之前处理代码又要修改... .Net发展WPF/SL时代,有了双向绑定,这种痛苦经历已经一去不返了,我们只需要关注数据即可,GridView...与数据源之间会相互通知各自变化情况,批量保存时,不管GridView中数据用户如何修改,也不用去理会行模板中控件名是啥,直接对数据源进行处理即可。...item.Age)); } } } public class PersonCollection { private ObservableCollection... lstData = new ObservableCollection(); public ObservableCollection LstData

90550

C#-DataGrid使用(三)

我们之前DataGrid使用第一部分中,使用到了拖拽事件,它能够实现用鼠标拖拽表格行,对顺序进行重新排列,但是这个不够完善,当你在行中使用模板,添加了按钮,或者下拉框等控件时候,对按钮点击事件有影响...之前我们是鼠标移动时候,如果左键按下,直接进入拖拽状态中,这就导致行中按钮点击没办法执行,所以我们加一个判断,让鼠标移动一定距离之后进入拖拽状态,可以避免此问题,另外,我们这里把鼠标事件写到datagridrow...上,下面是参考代码: //datagrid.xaml <Setter...MouseEventArgs e){ try{ if(e.leftButton==MouseButtonState.Pressed){ //判断鼠标移动位置大于某个进入拖拽状态...绑定数据源 ObservableCollection items=(this.DataContext as viewModel).bindingItems

19810

Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象

本文会重点介绍构建Silverlight自定义数据绑定控件过程中,我们会对数据源进行操作,那么就会碰到上述两个接口,如何正确处理它们。...比如一个数据行对象,你可以更改其多个列没有提交者前,都可以通过CancelEdit进行回滚。 通过一个简单Memo模式就可以实现这个对象。...自定义数据绑定控件应该如何处理这两个接口 IEditableObject 如果数据绑定控件发现当前行绑定对象是IEditableObject,那么该行上如果有一个Cell进入编辑状态,并且是第一个单元格时候...注意这个时候不会调用IEditableObjectCancelEdit方法,这是Cell本身应该提供行为。...这样的话,自定义数据绑定控件就可以完美支持这两个接口了。 说明:以上描述是以Silverlight DataGrid为例,自定义控件类似。

89390

WPF 多线程下跨线程处理 ObservableCollection 数据

UI 线程 根据以上描述,可以了解 WPF 里面,如果有较多数据量,想要多线程处理 ObservableCollection 集合,可以采用在非 UI 后台线程创建 ObservableCollection...关联 UI 线程之前,对 ObservableCollection 任何处理都不会涉及到访问 UI 元素,因此也就没有了非 UI 线程不能访问 UI 元素限制。...列表能力,必须从业务上确保只有后台线程访问,而 UI 线程不会ObservableCollection 列表进行任何改动 确保 UI 线程不会改动到 ObservableCollection...完成之后,再将新 ObservableCollection 对象赋值给 UI 进行绑定 private async void Button2_Click(object sender, RoutedEventArgs...例如以上代码,如果没有关注线程安全,通知 UI 线程集合变更之后,刚好 UI 线程去读取此集合新时候,集合本身就被其他线程更改了内容,那么此时逻辑就不是符合预期 以上代码放在 github

3.4K10

WPF 已知问题 ObservableCollection CollectionChanged 修改集合内容将让 UI 显示错误

本文将告诉大家此问题复现方法和修复方法 UI 绑定 ObservableCollection 修改时,给此集合列表添加新项目,此时 UI 绑定数据是对但是界面显示错误。...ToString() => Name; } 接着 MainWindow 里添加一个 ObservableCollection 属性用于让 XAML 绑定,这里不加入一个 ViewModel...一个绕过方法是进入 List_CollectionChanged 减等事件,但是绕过是存在坑,原本预期列表顺序应该是 0 2 xx 顺序,然而实际界面显示如下 以上就是最简单方法让大家了解问题...[累积计数计算方式为: 上次重置时计数 + 添加数 - 自上次重置删除数。]...最常见原因有: (a)未引发相应事件情况下更改了集合或集合计数,(b)引发事件使用了错误索引或项参数。

2.3K30

.NET Core 3 WPF MVVM框架 Prism系列之事件聚合器

,就是如何处理同模块不同窗体之间通信和不同模块之间不同窗体通信,Prism提供了一种事件机制,可以应用程序中低耦合模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事件进行通讯...4.实现多订阅多发布  同理,我们实现搜索Medicine添加到当前病人列表中也是跟上面步骤一样,Events文件夹创建事件类MedicineSentEvent: MedicineSentEvent.cs...is done asynchronously on a background thread. /// BackgroundThread } 三种枚举作用...,但是要手动取消订阅事件,因为事件实例对保留对订阅者实例强引用,否则就算窗体关闭,也不会进行GC回收....设置为false,事件维护对订阅者实例弱引用,当窗体关闭时,会自动取消订阅事件,也就是不用手动取消订阅事件 4.filter参数  filter是一个Predicate泛型委托参数,返回为布尔

1.4K30
领券