我有两个类 - Object 和 Parameters。
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 中的每个实例,如果该实例在列表中具有参数,则将列表中的值绑定到新列。
我不一定需要它是列表,这是我使用的第一个想法。显然不是一个很好的。
感谢您的任何建议。
经过一番努力理解您的问题后,我相信您正在寻找
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]")