C# 如何将字典绑定到datagrid wpf

C# 如何将字典绑定到datagrid wpf,c#,wpf,dictionary,datagrid,C#,Wpf,Dictionary,Datagrid,我正在尝试将字典绑定到datagrid,目前还找不到一个明确的方法。 字典键应该是网格头,它的值应该是列数据。 例如 C#代码: var dictionary=newdictionary(); 字典。添加(“名字”、“名字”); 字典。添加(“姓氏”、“姓氏”); 字典。添加(“电话”、“+123-123-123”); 这意味着我希望我的datagrid有3个列: 名字 姓 电话 有没有一种方法可以将密钥数未知的字典绑定到datagrid? 现在我使用的是Datatable 谢谢做你想做的

我正在尝试将字典绑定到datagrid,目前还找不到一个明确的方法。 字典键应该是网格头,它的值应该是列数据。 例如 C#代码:

var dictionary=newdictionary();
字典。添加(“名字”、“名字”);
字典。添加(“姓氏”、“姓氏”);
字典。添加(“电话”、“+123-123-123”);
这意味着我希望我的datagrid有3个列:

  • 名字
  • 电话
有没有一种方法可以将密钥数未知的字典绑定到datagrid? 现在我使用的是Datatable
谢谢

做你想做的事情的最好方法如下:

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);
            }