【问题标题】:Custom collection crashes DataGrid on Edit自定义集合在编辑时崩溃 DataGrid
【发布时间】: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


【解决方案1】:

Here你可以阅读以下内容:

编辑

默认情况下,您可以编辑项目 直接在 DataGrid 中。为保证 可以提交编辑并且 正确取消,在 DataGrid 必须实现 IEditableObject 接口。 或者,您可以设置 IsReadOnly 属性为 true 以禁用 在 DataGrid 中进行编辑。

IEditableObject 接口是here 另见 IEditableCollectionView here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2019-01-23
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多