嗨,我和DataTables有点麻烦。所以我需要做的是,每当我更改绑定的DataTable的DataGrid中的任何单元格时,都要进行检测。
该怎么做呢?使用INotifyPropertyChanged或INotifyCollectionChanged
注意:我正在尝试使用INotifyPropertyChanged,但它只会检测到我在DataTable中设置了一些值,而不会在我更改DataGrid中任何单元格的值时检测到,我已经尝试过OneWay和TwoWay,但什么都没有发生。
提前感谢!
发布于 2011-04-27 11:24:37
数据网格将被绑定到一个对象列表。如果希望网格在单个对象属性更改时更新,则每个包含的对象都必须实现INotifyPropertyChanged接口。
INotifyCollectionChanged是集合应该实现的接口,用于通知添加和删除事件。
请参阅this page上的“如何实现集合”一节。
这里有一个解决你问题的方法:
DataRow中的属性。在此类实现DataTable的INotifyPropertyChanged.ObservableCollection<T>或您的新类。ObservableCollection已经实现了INotifyCollectionChanged,因此可以省去您自己实现它的工作。
发布于 2011-04-27 17:41:05
如果您将数据网格的itemssource设置为数据表,那么wpf将创建一个绑定到该数据网格的IBindingListView。
你现在能做的就是通过datagrid编辑、添加和删除数据表中的项。如果您想知道datatable中的单元格何时发生更改,可以订阅DataTable.ColumnChanged事件。
为什么你想知道一个单元格什么时候改变了?
发布于 2020-09-30 22:23:56
你问题标题的答案是:两者都不是。实际上,您不需要将DataTable绑定到DataGrid。您绑定了一个DataView。“ADO.NET DataView实现IBindingList接口,该接口提供绑定引擎侦听的更改通知。”(绑定源概述)对您的问题的一种回答是:使用TextBox (通常)修改datagrid单元格。使用从textbox继承的新TextBox执行此操作,并覆盖它的OnGotFocus和OnLostFocus方法。
https://stackoverflow.com/questions/5798936
复制相似问题