![](/img/trans.png)
[英]How do I programmatically bind a WPF Datagrid to a ObservableCollection of custom objects?
[英]How do I bind an ObservableCollection of Dictionaries to DataGrid?
我試圖了解如何將ObservableCollection<*Dictionary<string, DBRecord>>
綁定到DataGrid
的ItemSource
屬性。
您可以在下面看到代表我在 memory 中的數據庫表的類。 我需要這樣做,因為表模式在standalone.xml 文件中描述(我無法更改它)。
public abstract class DBField {
public string Name;
public DBField(string name) {
Name = name;
}
}
public class DBValueField<T> : DBField {
public T Value;
public DBValueField(string name, T value) : base(name) {
Value = value;
}
}
public class DBTextField : DBValueField<string> {
public DBTextField(string name, string value) : base(name, value) { }
}
public class DBIntField : DBValueField<int> {
public DBIntField(string name, int value) : base(name, value)
{}
}
public class DBFloatField : DBValueField<float> {
public DBFloatField(string name, float value) : base(name, value)
{}
}
public class DBDoubleField : DBValueField<double> {
public DBDoubleField(string name, double value) : base(name, value)
{}
}
public class DBBoolField : DBValueField<bool> {
public DBBoolField(string name, bool value) : base(name, value)
{}
}
public class DBRecord {
public Dictionary<string, DBField> Fields { get; set; }
}
public class DBTable {
private readonly XmlSchema schema;
public List<DBRecord> Records { get; set; }
}
這是我的數據庫視圖模型:
public class DatabaseViewModel : BaseViewModel {
public Dictionary<string, DBTable> Tables { get; private set; }
public DBTable ActiveTable { get; private set; }
public ObservableCollection<DBRecord> ActiveData { get; set; }
}
我有一個ComboBox ,其中包含所有加載的數據庫表的完整列表,並且我在該 ComboBox 下方有一個DataGrid元素。 這個想法是,當您 select 特定表時,ViewModel 將使用列(從表模式檢索)和值(值分配給ActiveData作為引用並從組合框中的選定表中檢索)填充 DataGrid。 問題是我不明白如何正確地將這樣的結構綁定到 DataGrid。
我的想法是:
這是我的 WPF 標記:
<ComboBox x:Name="tablesComboBox"
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="8"
Style="{StaticResource DarkFlatComboBox}"
ItemsSource="{Binding Tables, Mode=OneWay}"
DisplayMemberPath="Key"
SelectedValuePath="Value"
SelectionChanged="ComboBox_SelectionChanged"/>
<DataGrid x:Name="dataGrid"
Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="8"
AutoGenerateColumns="True"
LoadingRow="DataGrid_LoadingRow"
Style="{StaticResource DarkDataGrid}"
ItemsSource="{Binding ActiveTable.Records,
Mode=TwoWay}"/>
根據 BionicCode 的評論,我似乎試圖通過創建DataTable
、 DataColumn
、 DataRow
和其他類來重新發明輪子。
我刪除了我的類,並將我的代碼基於表的 System.Data 類。
此外, DataTable
完美地綁定到DataGrid
,它解決了我所有的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.