绑定到 DataGrid

问题描述 投票:0回答:1

我有两个类 - ObjectParameters

Public class Object
{
    public int ID { get; set; }
    public string Name { get; set; }
    ......
    public List<Parameters> Paramlist { get; set; } = new List<Parameters>();
}

Public class Parameters
{   
    public string parName { get; set; }
    public string Value { get; set; }   
}

大约有 40 种对象。每个对象类型都有多个参数,所有参数的共同点都在对象类中列出。但是,每种类型也有其自己的参数。这就是我使用列表的原因。

现在用户可以选择他想在 DataGrid 中看到的对象类型。然后他可以选择他想查看什么样的参数。

因此只定义了一个 DataGrid 列 - ObjectName(实例名称)。其他的都是像这样在运行时添加的

 MainDataGrid.Columns.Add(new DataGridTextColumn
 {
     Header = _parameter,
     Binding = new System.Windows.Data.Binding(_parameter),
     //_parameter is string received from user by picking one of the parameters in another DataGrid

 });
  

它有效,但仅适用于对象类中列出的参数。 现在我想绑定其他参数。基本上遍历 DataGrid 中的每个实例,如果该实例在列表中具有参数,则将列表中的值绑定到新列。

我不一定需要它是列表,这是我使用的第一个想法。显然不是一个很好的。

感谢您的任何建议。

c# wpf binding datagrid
1个回答
0
投票

经过一番努力理解您的问题后,我相信您正在寻找

Indexers

这里是文档:

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/indexers/

通过

Object
 扩展您的 
indexer

课程

公共类对象 { 公共 int ID { 获取;放; } 公共字符串名称{获取;放; }

public string? this[string propertyName]
{
    get
    {
        var parameterByName = Paramlist.FirstOrDefault(x => x.Name == propertyName);
        return myMagicValue?.Value;
    }
    set
    {
        var myMagicValue = Paramlist.FirstOrDefault(x => x.Name == propertyName);
        if (myMagicValue == null)
            Paramlist.Add(new() { Name = propertyName, Value = value });
        else
            myMagicValue.Value = value;
    }
}

public List<Parameters> Paramlist { get; set; } = new List<Parameters>();

}

通过执行此操作,您可以使用索引器语法

Binding
创建一个
[PropertyName]

例如。

new System.Windows.Data.Binding("[MyProperty]")
© www.soinside.com 2019 - 2024. All rights reserved.