我的目的是能够绑定从某些通知机制获得的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,没有任何堆栈跟踪或更明确的消息。
我不知道应该怎样做才能让它发挥作用。我已经尝试了我在这里或网上其他地方找到的所有可能的解决方案。
有没有人知道出了什么问题?
答案 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