У меня есть вид дерева в моем файле XAML, как это:Для чего нужен элемент ItemsSource?
<TreeView ItemsSource="{Binding Items}" Margin="0,0,5,5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type ViewModels:NodeViewModel}" ItemsSource="{Binding Path=Descendants}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Node.Name}}" FontWeight="Bold"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
мой взгляд модель обладает этим свойством:
private List<NodeViewModel> _items = new List<NodeViewModel>();
public List<NodeViewModel> Items
{
get { return _items; }
set
{
_items = value;
base.RaisePropertyChangedEvent("Items");
}
}
Это прекрасно работает, но II заметил, что элементы списка всегда только один элемент, корневой элемент, а дерево создается путем итерации через потомков. Поэтому я стараюсь изменить свойство на это:
private NodeViewModel _rootItem;
public List<NodeViewModel> RootItem
{
get { return _rootItem; }
set
{
_rootItem= value;
base.RaisePropertyChangedEvent("RootItem");
}
}
Но таким образом дерево не отображается.
Итак, элементы источника дерева должны быть списком? Почему, если у меня всегда есть только один элемент в списке, это корневой элемент?
Элемент 'ItemsSource' TreeView должен быть' IEnumerable' просто потому, что 'TreeView' является' ItemsControl' и ведет себя как любой другой 'ItemsControl' в том, как он имеет дело с' ItemsSource'. –