You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dictionary绑定DataGrid列失败:单元格为空,求正确绑定方法

解决DataGrid绑定Dictionary值为空的问题

早上好!我来帮你搞定这个Dictionary绑定的问题~你的代码里有两个关键问题导致单元格显示为空,咱们一步步来修正:

问题分析

  1. 键类型不匹配:你的Dictionary<int, string>键是int类型,但代码里用字符串headerCol("Test")作为键去索引,显然找不到对应的条目
  2. 绑定路径错误:Dictionary的Value是string类型,本身并没有Name属性,所以parameters["+headerCol+"].Name这个绑定路径完全无效

解决方案

根据你的需求,分两种常见情况处理:

情况1:保持Dictionary键为int类型

如果你的Dictionary确实需要用int作为键,那你需要确保用来索引的键是有效的int值,同时绑定路径要直接指向Dictionary的Value(因为Value是string):

// 假设columns里是有效的int字符串,比如["1", "2", "3"]
foreach (string keyStr in columns) {
    // 先把字符串转成int类型
    if (int.TryParse(keyStr, out int key)) {
        var column = new DataGridTextColumn {
            Header = $"参数{key}", // 自定义表头
            Width = ActualWidth,
            // 正确的绑定路径:用索引器访问Dictionary的Value
            Binding = new Binding($"parameters[{key}]")
        };
        MyDataGrid.Columns.Add(column);
    }
}

情况2:把Dictionary的键改为string类型

如果你的实际需求是用字符串(比如"Test")作为键,那先修改MyClass的Dictionary定义:

public class MyClass { 
    public Dictionary<string, string> parameters { get; set; } 
}

然后调整绑定代码,直接用字符串键访问,并且去掉多余的.Name:

string headerCol = "Test";
foreach (string text in columns) {
    var column = new DataGridTextColumn {
        Header = headerCol,
        Width = ActualWidth,
        // 正确绑定到Dictionary的Value
        Binding = new Binding($"parameters['{headerCol}']")
    };
    MyDataGrid.Columns.Add(column);
}

额外提示

  • 确保你的MyClass实例中,parameters字典已经被正确初始化并且包含对应的键值对,比如:
    var dataItem = new MyClass {
        parameters = new Dictionary<string, string> {
            {"Test", "这是Test对应的值"}
        }
    };
    MyDataGrid.ItemsSource = new List<MyClass> { dataItem };
    
  • 如果你的Dictionary的Value是自定义类(比如有Name属性的类),那绑定路径才需要.Name,但你的代码里Value是string,所以不需要这部分

内容的提问来源于stack exchange,提问作者Elisa P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:12:31