嗨,我在使用DataTables时遇到了麻烦。所以我需要的是检测每当我更改绑定的DataTable的DataGrid中的任何单元格时。
怎么做?使用INotifyPropertyChanged
或INotifyCollectionChanged
?
注意:我正在尝试使用INotifyPropertyChanged
,但它只检测我何时在DataTable中设置了一些值,而且当我更改DataGrid中任何单元格的任何值时,我从未尝试过OneWay
和TwoWay
但没有任何反应。
提前致谢!
答案 0 :(得分:9)
数据网格将绑定到对象列表。如果希望在单个对象属性更改时更新网格,则每个包含的对象必须实现INotifyPropertyChanged
接口。
INotifyCollectionChanged
是集合应该实现的接口,用于添加和删除事件的通知。
请参阅this page上的“如何实施馆藏”部分。
<小时/> 这是解决问题的方法:
DataRow
中保存的属性。在此类工具上INotifyPropertyChanged
。DataTable
或您的新课程,而不是ObservableCollection<T>
。 ObservableCollection
已经实现了INotifyCollectionChanged
,因此这可以节省您自己实施的工作量。
答案 1 :(得分:0)
如果将datagrid的itemssource设置为datatable,则wpf创建一个绑定到datagrid的IBindingListView。
您现在可以做的是通过datagrid编辑,添加和删除数据表中的项目。如果您想知道数据表中的单元格何时更改,您可以订阅DataTable.ColumnChanged事件。
为什么要知道更改单元格的时间?
答案 2 :(得分:0)
您的问题标题的答案是:都不是。实际上,您不需要将DataTable绑定到DataGrid。您绑定一个DataView。 “ ADO.NET DataView实现了IBindingList接口,该接口提供绑定引擎侦听的更改通知。”(绑定源概述) 您的问题的一个答案是: 您通常使用TextBox修改datagrid单元。使用从TextBox继承并覆盖其OnGotFocus和OnLostFocus方法的新文本框来执行此操作。