我有一个表示顶点的类,它可以有多个属性。每个属性都由其名称标识。
public class Vertex
{
private Dictionary<string, Attr> attributes;
public Attr GetAttributeByName(string attributeName)
{
Attr attribute;
if (attributes.TryGetValue(attributeName, out attribute))
{
return attribute;
}
return null;
}
}
我想要DataGrid
将ItemsSource
绑定到某个ObservableCollection<Vertex>
。每列应代表顶点的一个属性。我想在运行时控制列(添加新列或删除旧列)。但我无法做到这一点,因为新的列绑定需要它将从中获取单元格数据的属性名称。但是我需要绑定来调用方法GetAttributeByName()
和属性的名称来获取数据,而不仅仅是获取属性。
string newAttributeName = "some_name";
DataGridTextColumn newColumn = new DataGridTextColumn();
newColumn.Header = newAttributeName;
newColumn.Binding = ???;
dataGrid.Columns.Add(newColumn);
有办法吗?
答案 0 :(得分:3)
有办法吗?
不,你无法真正绑定到这样的方法。
但是如果你将Vertex
作为string newAttributeName = "some_name";
DataGridTextColumn newColumn = new DataGridTextColumn();
newColumn.Header = newAttributeName;
newColumn.Binding = new Binding($"Attributes[{newAttributeName}]");
类的公共属性公开,那么你应该可以绑定到这个:
onchange