2017-06-29 75 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

相關問題