C# 如何将字典绑定到datagrid wpf
我正在尝试将字典绑定到datagrid,目前还找不到一个明确的方法。 字典键应该是网格头,它的值应该是列数据。 例如 C#代码:C# 如何将字典绑定到datagrid wpf,c#,wpf,dictionary,datagrid,C#,Wpf,Dictionary,Datagrid,我正在尝试将字典绑定到datagrid,目前还找不到一个明确的方法。 字典键应该是网格头,它的值应该是列数据。 例如 C#代码: var dictionary=newdictionary(); 字典。添加(“名字”、“名字”); 字典。添加(“姓氏”、“姓氏”); 字典。添加(“电话”、“+123-123-123”); 这意味着我希望我的datagrid有3个列: 名字 姓 电话 有没有一种方法可以将密钥数未知的字典绑定到datagrid? 现在我使用的是Datatable 谢谢做你想做的
var dictionary=newdictionary();
字典。添加(“名字”、“名字”);
字典。添加(“姓氏”、“姓氏”);
字典。添加(“电话”、“+123-123-123”);
这意味着我希望我的datagrid有3个列:
- 名字
- 姓
- 电话
谢谢做你想做的事情的最好方法如下: 在
CodeBehind
中,如果没有模型,您可以创建Anonymus
对象的列表,并输入构造函数填充列表并添加到DataGrid
的ItemsSource
:
List<Object> mylist = new List<Object>(){
new {FirstName="myfirstName1", LastName="mylastName1", Phone="+123-123-123"},
new {FirstName="myfirstName2", LastName="mylastName2", Phone="+124-124-124"},
new {FirstName="myfirstName3", LastName="mylastName3", Phone="+125-125-125"}
}
this.myDataGrid.ItemsSource = myList;
<DataGrid x:Name="MyDataGrid" AutoGenerateColumns="false" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding FirsName}" Header="First name" />
<DataGridTextColumn Binding="{Binding LastName}" Header="Last name" />
<DataGridTextColumn Binding="{Binding Phone}" Header="Phone" />
</DataGrid.Columns>
</DataGrid>
我会尽量说得更具体一些。 假设我得到一个对象列表,例如表。 每个表可以有不同的数据结构和不同的行数。 所以我不能绑定到任何数据结构。 目前,我找到的最佳解决方案是将网格绑定到DataTable
var selectedTable = new DataTable();
if (tableEntities.Any())
{
var colunms = table.Properties;
foreach (var colunm in colunms)
{
selectedTable.Columns.Add(colunm.Key);
}
foreach (var entity in tableEntities)
{
var row = selectedTable.NewRow();
foreach (var property in entity.Properties)
{
row[property.Key] = property.Value.GetStringValue();
}
selectedTable.Rows.Add(row);
}
但是我不喜欢这个解决方案按照您定义的方式,这个数据网格总是只有一行,这没有多大意义。我想我第一次不清楚,字段(键)的数量未知。我想我第一次不清楚,字段(键)的数量未知,也没有名称。如果我使用匿名对象,我仍然必须创建一个具有已定义属性的对象。您试图做什么?您可以告诉我您使用此解决方案的意图是什么?您不认为垂直显示属性比以列的形式水平显示属性更好吗?如果你这样做,他们的字典解决方案肯定是最好的。
var selectedTable = new DataTable();
if (tableEntities.Any())
{
var colunms = table.Properties;
foreach (var colunm in colunms)
{
selectedTable.Columns.Add(colunm.Key);
}
foreach (var entity in tableEntities)
{
var row = selectedTable.NewRow();
foreach (var property in entity.Properties)
{
row[property.Key] = property.Value.GetStringValue();
}
selectedTable.Rows.Add(row);
}