【发布时间】:2011-03-03 13:46:43
【问题描述】:
我目前正在尝试将 DataGrid.ItemsSource 绑定到自定义 RowCollection,该 RowCollection 实现了 IList 和 INotifyCollectionChanged:
Public Class RowCollection(of T)
Implements IList(Of T)
Implements INotifyCollectionChanged
Private _List As New List(Of T)
...
(对不起VB代码,我很快就会把我所有的代码翻译成C#。)
注意类不派生自任何现有的 CLR 集合。我创建了自己的类,因为我需要重写 GetItemAt,以实现记录分页。
集合内部在其自己的私有列表_List 中添加和删除对象。
现在,我可以在 DataGrid 中查看项目,但只要双击要编辑的单元格,我就会收到 InvalidOperationException: 'EditItems' is not available.。。。。。。 p>
我的问题是,我应该实现哪些其他接口才能使我的集合与 DataGrid 完全兼容?
【问题讨论】:
-
+1 我记得我有同样的问题,但没有尝试深入研究它,因为我没有时间。据我记得,我最终使用 ObservableCollection
作为 ItemsSource 将它们与我自己的集合同步。我很好奇是否有人有解决方案。 -
我认为您尝试做的事情可以用更简单的方式完成。使用现有集合,然后将 DataGridView 置于虚拟模式并实现 CellValueNeeded(object, ...CellEventArgs) 处理程序。链接:msdn.microsoft.com/en-us/library/… 虚拟模式的目的是支持你心目中的那种分页场景。
-
对不起。我忘了提到我在 .Net 3.5 的 WPF 工具包中使用 WPF DataGrid。您提到的链接是关于 WinForms 的。
-
@HighCore - 是的。感谢您的澄清,我应该注意到这一点。
-
@HCL - 是的。实际上,我最终使用了一个普通的 ObservableCollection
并创建了一个派生的 ListCollectionView,我在其中定义了用于检索项目和获取项目计数的自定义逻辑。因此,我能够创建某种数据虚拟化。谢谢!
标签: wpf collections datagrid toolkit itemssource