Как связать объект дерева с сеткой данных? - PullRequest
0 голосов
/ 28 июня 2019

У меня есть 2 разных класса (A и B), которые связаны друг с другом, чтобы сделать что-то похожее на двоичное дерево, подобное этому:

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

    public int Min;
    public int Max;   
}

Как я могу связать это деревогде в сетке данных отображаются только «Мин» и «Макс» конечных / конечных узлов?

Спасибо!

1 Ответ

0 голосов
/ 28 июня 2019

Сначала настройте свойства всех этих полей, чтобы вы могли связываться с ними. Затем напишите тривиальные рекурсивные методы для обхода дерева и возврата плоского списка листовых узлов. Я предполагаю, что «лист / последний» просто означает «лист».

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...