Метод рекурсивного добавления глубины в сетку дерева - PullRequest
0 голосов
/ 13 мая 2019

поэтому сейчас у меня есть древовидная сетка, которая имеет до 3-х уровней расширения, потому что я вручную записал вложенный иерархический шаблон данных в другой шаблон данных, мне интересно, есть ли метод для автоматического добавления глубины вмое дерево в виде сетки, когда моя коллекция расширяется в глубину.Мой источник предметов - это также вложенная наблюдаемая коллекция с ветвями в них.

Я ищу способ рекурсивного добавления уровней вместо того, чтобы вручную вкладывать их друг в друга.

Спасибо.

1 Ответ

0 голосов
/ 13 мая 2019

HierarchicalDataTemplate должен сделать это для вас. Вам нужно определить его только один раз в TreeView DataTemplate.

Я думаю, нам нужно только связать HierachicalDataTemplate s ItemsSource во вложенное свойство вашего класса, и оно позаботится обо всем остальном.

Если я что-то не так понял относительно вашего намерения, пожалуйста, дайте мне знать.

Вот моя попытка:

XAML

<TreeView ItemsSource="{Binding Branches}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Branches}">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition></ColumnDefinition>
                    <ColumnDefinition></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <TextBox Grid.Column="0" Text="{Binding Id}"></TextBox>
                <TextBox Grid.Column="1" Text="{Binding Name}"></TextBox>
            </Grid>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

Класс с вложенной коллекцией

public class Branch
{
    public string Id { get; set; }
    public string Name { get; set; }
    public ObservableCollection<Branch> Branches { get; set; }
}

Жестко закодированное значение в основной форме для целей тестирования

public partial class MainWindow : Window
{
    public Branch Branch { get; set; }

    public MainWindow()
    {
        Branch = new Branch()
        {
            Id = "1",
            Name = "A",
            Branches = new ObservableCollection<Branch>()
            {
                new Branch()
                {
                    Id = "2",
                    Name = "B",
                    Branches = new ObservableCollection<Branch>()
                    {
                        new Branch()
                        {
                            Id = "3",
                            Name = "C",
                        },
                        new Branch()
                        {
                            Id = "3",
                            Name = "C",
                            Branches = new ObservableCollection<Branch>()
                            {
                                new Branch()
                                {
                                    Id = "3",
                                    Name = "C",
                                },
                                new Branch()
                                {
                                    Id = "3",
                                    Name = "C",
                                }
                            }
                        }
                    }
                },
                new Branch()
                {
                    Id = "2",
                    Name = "B",
                    Branches = new ObservableCollection<Branch>()
                    {
                        new Branch()
                        {
                            Id = "3",
                            Name = "C",
                        }
                    }
                }
            }
        };

        InitializeComponent();
        this.DataContext = this.Branch;
    }
}

Результат

enter image description here

...