У меня есть объект класса, определенного ниже
class XYZ
{
List<XYZ> child;
String header;
}
Я хочу привязать этот объект к древовидной структуре. Первоначально корень XYZ будет самым верхним TreeViewItem. root будет иметь дочерний элемент List как sub TreeViewItems. Это будет продолжаться рекурсивно, пока список каждого объекта XYZ не будет пустым. Каждый TreeViewItem является либо узлом, либо листом (если дочерний элемент List пуст).
Я могу сделать это программно, добавив TreeViewItem в качестве дочернего элемента в родительский TreeViewItem.
Количество уровней неизвестно.
Я ссылался на этот ответ Bind Object на WPF TreeView, но здесь он упоминается для трехуровневой иерархии.
Вам просто нужно определить иерархический Datatemplate для вашей модели viewmodel, и это должно заботиться о нескольких уровнях в вашем древовидной структуре.
Убедитесь, что используемая вами коллекция реализует INotificationPropertyChanged
План данных будет в строках
<TreeView ItemsSource={Binding child}>
<TreeView.Resources>
<HierarchicalDataTemplate ItemsSource="{Binding child}" DataType="{x:Type vm:XYZ}">
<Grid>
<TextBlock Text="{Binding header}"/>
</Grid>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>