2017-06-29 46 views
0

我的目的是能够绑定到从某些通知机制获取的WPF控件类。尝试编辑DataGrid单元格时出现InvalidOperationException

我已经定义了一个包含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

尝试实行非通用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

+0

谢谢您的回答。不幸的是,它不起作用。 我刚刚尝试过,作为一个效果,不再考虑ICustomTypeDescriptor。 这意味着datagrid显示我的BaseClass的真实属性,而不是显示我需要显示的动态属性。 – user2157074

+0

我不认为这是支持的。 – mm8

相关问题