2012-10-04 100 views
0

因此,我剛剛加入WPF俱樂部後,在Winforms涉足了幾年。我對WPF中的數據綁定毫不留情地享受,但我在DataGrid上遇到了問題。DataBinding DataGrid自定義數據結構

我有一個高度自定義的數據結構,它存儲來自SQL查詢的結果,我希望在WPF中繼續使用它。我已經看到綁定到對象列表的示例,但不適用於像SQL查詢那樣動態的任何內容。

是否有一些接口,我可以使我的數據結構實現,因此DataGrid可以獲得必要的信息,如行&列數,標題和數據?

回答

0

我的目標是綁定到我類似的自定義結構的DataTable,讓DataGrid「發現」我的結構信息。

簡短的回答是實現以下接口:

IList IEnumerable ITypedList

還有來自CustomTypeDescriptor繼承(或實施ICustomTypeDescriptor

This Question在處理幫助很大CustomTypeDescriptor這是最具挑戰性的東西。

我的枚舉對象是一個簡單的對象,它將參考存儲回主表,以便它可以詢問特定行和列的值。

public AgilityTableRow(AgilityTableBase table, int rowIndex) 
    { 
     _table = table; 
     _rowIndex = rowIndex; 
    } 

    public object this[int columnIndex] 
    { 
     get 
     { 
      return _table[columnIndex, _rowIndex]; 
     } 
    } 

    public object this[string columnName] 
    { 

     get 
     { 
      return _table[_table.GetFieldIndex(columnName), _rowIndex]; 
     } 
    } 

注:這個類需要實現ICustomTypeDescriptor,可以簡單地將呼叫轉移到表中獲取屬性:

public PropertyDescriptorCollection GetProperties() 
    { 
     return _table.GetProperties(); 
    } 
0

這些項目應該實現INotifyPropertyChanged,你應該把它們放在一個ObservableCollection <>中,這樣網格纔會被通知變化。

如果將AutoGenerateColumns設置爲true,那麼網格會自動爲您的模型的每個屬性創建一列。

如果你只有「原始」數據和沒有模型類,那麼我認爲你必須手動創建列。 WPF綁定非常靈活,它也可以綁定到索引屬性/數組等。也許這可以幫助你「動態」的數據。

<TextBlock Text="{Binding myArray[0]}" />