a = Object.keys( [].fill.call({length:7}, '' ) ).map(Number)
a.pop();
console.debug(a)
[0, 1, 2, 3, 4, 5, 6]
Ваш 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 });
};
}
Или , лучшее решение,