首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >INotifyPropertyChanged还是带有DataTable的INotifyCollectionChanged?

INotifyPropertyChanged还是带有DataTable的INotifyCollectionChanged?
EN

Stack Overflow用户
提问于 2011-04-27 11:14:37
回答 3查看 8.8K关注 0票数 5

嗨,我和DataTables有点麻烦。所以我需要做的是,每当我更改绑定的DataTable的DataGrid中的任何单元格时,都要进行检测。

该怎么做呢?使用INotifyPropertyChangedINotifyCollectionChanged

注意:我正在尝试使用INotifyPropertyChanged,但它只会检测到我在DataTable中设置了一些值,而不会在我更改DataGrid中任何单元格的值时检测到,我已经尝试过OneWayTwoWay,但什么都没有发生。

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-27 11:24:37

数据网格将被绑定到一个对象列表。如果希望网格在单个对象属性更改时更新,则每个包含的对象都必须实现INotifyPropertyChanged接口。

INotifyCollectionChanged是集合应该实现的接口,用于通知添加和删除事件。

请参阅this page上的“如何实现集合”一节。

这里有一个解决你问题的方法:

  • 创建一个新类,用于公开当前保存在每个DataRow中的属性。在此类实现DataTableINotifyPropertyChanged.
  • Instead时,使用ObservableCollection<T>或您的新类。

ObservableCollection已经实现了INotifyCollectionChanged,因此可以省去您自己实现它的工作。

票数 12
EN

Stack Overflow用户

发布于 2011-04-27 17:41:05

如果您将数据网格的itemssource设置为数据表,那么wpf将创建一个绑定到该数据网格的IBindingListView。

你现在能做的就是通过datagrid编辑、添加和删除数据表中的项。如果您想知道datatable中的单元格何时发生更改,可以订阅DataTable.ColumnChanged事件。

为什么你想知道一个单元格什么时候改变了?

票数 0
EN

Stack Overflow用户

发布于 2020-09-30 22:23:56

你问题标题的答案是:两者都不是。实际上,您不需要将DataTable绑定到DataGrid。您绑定了一个DataView。“ADO.NET DataView实现IBindingList接口,该接口提供绑定引擎侦听的更改通知。”(绑定源概述)对您的问题的一种回答是:使用TextBox (通常)修改datagrid单元格。使用从textbox继承的新TextBox执行此操作,并覆盖它的OnGotFocus和OnLostFocus方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5798936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档