尝试编辑DataGrid单元格时出现InvalidOperationException

时间:2017-06-29 09:39:36

标签: c# .net wpf datagrid invalidoperationexception

我的目的是能够绑定从某些通知机制获得的WPF控件类。

我已经定义了一个包含MyItem对象的MyList类。这些MyItem对象具有运行时定义的属性。所以,MyItem实现了ICustomTypeDescriptor。 我希望在值更改时通知控件,因此它还实现了INotifyPropertyChanged。因为我的版本有问题,我也让它实现了IEditableObject。

所以,我将MyItem类定义为:

public class MyItem: BaseClass, INotifyPropertyChanged, ICustomTypeDescriptor, IEditable {
//...
}

其中BaseClass是我原来的类,我想让WPF控件可见。

MyList,它实现IEnumerable,因为这是DataGrid.ItemsSource,INotifyCollectionChanged所期望的,因为我希望控件被通知新行,IEditableCollectionView和IList试图解决我的版本问题。

所以,我有以下类定义:

public class MyList : BaseClass, INotifyCollectionChanged, IEnumerable<MyItem>,
                      IEditableCollectionView, IList<MyItem>
{
  private List<MyItem> _list = new List<MyItem(); // holds items
//...
}

当我将此列表设置为数据网格的项目源时,一切似乎都正常工作:数据网格的列是通过ICustomTypeDescriptor接口声明的动态属性。正确显示每个单元格的值。

但是,当我双击一个单元格进行编辑时,我得到一个InvalidOperationException,没有任何堆栈跟踪或更明确的消息。

我不知道应该怎样做才能让它发挥作用。我已经尝试了我在这里或网上其他地方找到的所有可能的解决方案。

有没有人知道出了什么问题?

1 个答案:

答案 0 :(得分:0)

尝试在IList类中实现非通用MyList接口,并确保不要将任何项直接添加到Items DataGrid集合中控制:https://social.msdn.microsoft.com/Forums/en-US/9deaa308-37e8-4110-814f-30d2de7c2654/datagrid-edititem-is-not-allowed-for-this-view?forum=wpf