WPF - DataGrid将列绑定到方法而不是属性

时间:2018-04-18 14:41:49

标签: c# wpf wpfdatagrid

我有一个表示顶点的类,它可以有多个属性。每个属性都由其名称标识。

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;
    }
}

我想要DataGridItemsSource绑定到某个ObservableCollection<Vertex>。每列应代表顶点的一个属性。我想在运行时控制列(添加新列或删除旧列)。但我无法做到这一点,因为新的列绑定需要它将从中获取单元格数据的属性名称。但是我需要绑定来调用方法GetAttributeByName()和属性的名称来获取数据,而不仅仅是获取属性。

string newAttributeName = "some_name";
DataGridTextColumn newColumn = new DataGridTextColumn();
newColumn.Header = newAttributeName;
newColumn.Binding = ???;

dataGrid.Columns.Add(newColumn);

有办法吗?

1 个答案:

答案 0 :(得分:3)

  

有办法吗?

不,你无法真正绑定到这样的方法。

但是如果你将Vertex作为string newAttributeName = "some_name"; DataGridTextColumn newColumn = new DataGridTextColumn(); newColumn.Header = newAttributeName; newColumn.Binding = new Binding($"Attributes[{newAttributeName}]"); 类的公共属性公开,那么你应该可以绑定到这个:

onchange