2011-03-03 56 views
5
的DataGrid

林目前正在嘗試的DataGrid.ItemsSource到自定義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'不可用。

我的問題是,我應該實現什麼其他接口,以使我的集合與DataGrid完全兼容?

+0

+1我記得我有同樣的問題,但沒有嘗試過鑽研它,因爲我沒有時間。據我記得,我最終使用ObservableCollection 作爲ItemsSource與我自己的集合同步它們。我很好奇,如果有人有解決方案。 – HCL 2011-03-03 13:52:37

+0

我認爲你想要做的事情可以用更簡單的方式完成。使用現有的集合,然後將DataGridView置於虛擬模式並實現CellValueNeeded(object,... CellEventArgs)處理程序。鏈接:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.virtualmode.aspx虛擬模式的目的是爲了支持你想到的那種分頁場景。 – 2011-03-03 14:06:21

+1

對不起。我忘了在WPF Toolkit for .NET 3.5中使用WPF DataGrid來提及Im。你提到的鏈接是關於WinForms的。 – 2011-03-03 14:15:11

回答

2

Here你可以閱讀以下內容:

編輯

默認情況下,您可以在DataGrid中直接編輯項目 。爲了保證 可以提交編輯並且 正確取消,DataGrid中的對象必須實現IEditableObject接口 。 或者,您可以將 IsReadOnly屬性設置爲true以在DataGrid中禁用編輯 。

的IEditableObject接口here 另見IEditableCollectionView here