首页 > 解决方案 > 如何将树对象绑定到数据网格?

问题描述

我有 2 个不同的类(A 和 B),它们相互链接以形成类似于二叉树的东西,如下所示:

public class A
{
    public B instanceB1;      
    public B instanceB2;
}
public class B
{
    public A instanceA;

    public int Min;
    public int Max;   
}

如何绑定这棵树,其中只有“Min”和“Max”的叶子/最后一个节点显示在数据网格中?

谢谢!

标签: c#wpfdata-binding

解决方案


首先,将所有这些字段设置为属性,以便您可以绑定到它们。然后编写简单的递归方法来遍历树并返回叶子节点的平面列表。我假设“叶子/最后”只是意味着“叶子”。

public class A
{
    public B instanceB1 { get; set; }
    public B instanceB2 { get; set; }

    public IEnumerable<B> EnumerateLeaves
    {
        get
        {
            foreach (var child in instanceB1.EnumerateLeaves
                                      .Concat(instanceB2.EnumerateLeaves))
            {
                yield return child;
            }
        }
    }

}

public class B
{
    public A instanceA { get; set; }

    public int Min { get; set; }
    public int Max { get; set; }

    public IEnumerable<B> EnumerateLeaves
    {
        get
        {
            if (instanceA == null)
            {
                yield return this;
            }
            else
            {
                foreach (var child in instanceA.EnumerateLeaves)
                    yield return child;
            }
        }
    }
}

然后绑定到它们:

<DataGrid
    ItemsSource="{Binding TreeRootItem.EnumerateLeaves}"
    AutoGenerateColumns="False"
    >
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Min}" Header="Min" />
        <DataGridTextColumn Binding="{Binding Max}" Header="Max" />
    </DataGrid.Columns>
</DataGrid>

推荐阅读