Используя ItemTemplate для TreeView при добавлении объектов в коде

Array.prototype.fill ()

a = Object.keys( [].fill.call({length:7}, '' ) ).map(Number)
a.pop();
console.debug(a)

[0, 1, 2, 3, 4, 5, 6]

10
задан Wallstreet Programmer 23 July 2009 в 23:24
поделиться

1 ответ

Ваш ItemTemplate пытается отобразить свойство «Имя» и «Возраст» в TextBlocks, но TreeViewItem не имеет свойства «Возраст», и вы не устанавливаете его «Имя».

Поскольку вы используете ItemTemplate, нет необходимости добавлять TreeViewItems в дерево. Вместо этого добавьте свои экземпляры Person напрямую:

_treeView.Items.Add(new Person { Name = "Sally", Age = 28});

Проблема, конечно же, в том, что ваш базовый объект («Person») не имеет никакого понятия иерархии, поэтому нет простого способа добавить «Joe» к «Sally» . Есть несколько более сложных вариантов:

Вы можете попробовать обработать событие TreeView.ItemContainerGenerator.StatusChanged и дождаться генерации элемента «Салли», затем получить его дескриптор и напрямую добавить Джо:

public Window1()
{
    InitializeComponent(); 
    var bob = new Person { Name = "Bob", Age = 34 }; 
    var sally = new Person { Name = "Sally", Age = 28 }; 

    _treeView.Items.Add(bob); 
    _treeView.Items.Add(sally);

    _treeView.ItemContainerGenerator.StatusChanged += (sender, e) =>
    {
        if (_treeView.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated) 
            return;

        var sallyItem = _treeView.ItemContainerGenerator.ContainerFromItem(sally) as TreeViewItem;
        sallyItem.Items.Add(new Person { Name = "Joe", Age = 15 });
    };
}

Или , лучшее решение,

11
ответ дан 4 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: