因此,我剛剛加入WPF俱樂部後,在Winforms涉足了幾年。我對WPF中的數據綁定毫不留情地享受,但我在DataGrid
上遇到了問題。DataBinding DataGrid自定義數據結構
我有一個高度自定義的數據結構,它存儲來自SQL查詢的結果,我希望在WPF中繼續使用它。我已經看到綁定到對象列表的示例,但不適用於像SQL查詢那樣動態的任何內容。
是否有一些接口,我可以使我的數據結構實現,因此DataGrid
可以獲得必要的信息,如行&列數,標題和數據?
因此,我剛剛加入WPF俱樂部後,在Winforms涉足了幾年。我對WPF中的數據綁定毫不留情地享受,但我在DataGrid
上遇到了問題。DataBinding DataGrid自定義數據結構
我有一個高度自定義的數據結構,它存儲來自SQL查詢的結果,我希望在WPF中繼續使用它。我已經看到綁定到對象列表的示例,但不適用於像SQL查詢那樣動態的任何內容。
是否有一些接口,我可以使我的數據結構實現,因此DataGrid
可以獲得必要的信息,如行&列數,標題和數據?
我的目標是綁定到我類似的自定義結構的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();
}
這些項目應該實現INotifyPropertyChanged,你應該把它們放在一個ObservableCollection <>中,這樣網格纔會被通知變化。
如果將AutoGenerateColumns設置爲true,那麼網格會自動爲您的模型的每個屬性創建一列。
如果你只有「原始」數據和沒有模型類,那麼我認爲你必須手動創建列。 WPF綁定非常靈活,它也可以綁定到索引屬性/數組等。也許這可以幫助你「動態」的數據。
<TextBlock Text="{Binding myArray[0]}" />