【问题标题】:Bind dictionary of a class to data grid将类的字典绑定到数据网格
【发布时间】:2026-01-26 18:50:01
【问题描述】:

我有以下类,我想将它的字典值绑定到数据网格控件

public class DBRow : IEnumerable<DBColumn>
{
    public DBColumn this[string ColumnName]
    {
        get { return Columns[ColumnName]; }
        set { Columns[ColumnName] = value; }
    }
    public Dictionary<string, DBColumn> Columns { get; set; }

    public DBRow()
    {
        this.Columns = new Dictionary<string, DBColumn>();
    }

    public List<KeyValuePair<string,DBColumn>> GetKeysPair()
    {
        List<KeyValuePair<string, DBColumn>> ListOfKeyPair = new List<KeyValuePair<string, DBColumn>>();
        foreach (var KeyPair in Columns)
        {
            ListOfKeyPair.Add(KeyPair);
        }
        return ListOfKeyPair;
    }

    public void AddColumn(DBColumn Column)
    {
        Columns.Add(Column.Name, Column);
    }
    public IEnumerator<DBColumn> GetEnumerator()
    {
        foreach (var Column in Columns)
        {
            yield return Column.Value;
        }
    }
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        foreach (var item in Columns)
        {
            yield return item;
        }
    }
}

上使用 foreach
GetKeysPair() method 

我尝试这样绑定它:

    foreach (var item in Row.GetKeysPair())
        {
            DataGridTextColumn DataGridColumn = new DataGridTextColumn();
            DataGridColumn.Header = item.Value.Name;

            DataGridColumn.Binding = new Binding(********); <<---  Problem!!             

            dataGridDataList.Columns.Add(DataGridColumn); <<--- DataGrid
        }

问题是我不知道该输入什么

New Binding(string);

我正在尝试绑定以下属性:

public struct DBColumn
{
    public object Data { get; set; }
}

我尝试了很多选择,但我无法弄清楚:(

【问题讨论】:

    标签: c# wpf binding datagrid dictionary


    【解决方案1】:

    嗯,我假设您的 DataGrid 的 ItemsSource 是字典的集合(或 list 的集合),如果是这种情况,那么我相信您应该能够只使用索引器来访问该值,例如

    DataGridColumn.Binding = new Binding(string.Format("[{0}].Data", item.Key)); 
    

    【讨论】:

    • 哇,谢谢。它确实有效。我在那该死的线上花了大约 3 个小时,由于某种原因,我只是看不到简单的答案:D 非常感谢你