Sam*_*ell 15 .net wpf treeview xaml hierarchy
假设我有一个二叉树,其中数据结构的根只是一个树节点.对于每个节点,孩子都可以通过Children酒店进入.这是我尝试过的.它TreeRoot是继承数据上下文的属性,但它是单个节点(不是集合).
<UserControl.Resources>
<HierarchicalDataTemplate x:Key="TreeNodeTemplate" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</UserControl.Resources>
<Grid>
<TreeView ItemsSource="{Binding TreeRoot}" ItemTemplate="{StaticResource TreeNodeTemplate}" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
我遇到了这个问题并得出结论,我无法将非集合绑定到树视图作为指定根节点的方法.所以我做的是快速更改我的ModelView并使表示根节点的属性成为1项的集合.
public class ContainerViewModel
{
public ObservableCollection<TreeNodeViewModel> RootNodes { get; private set; }
public ContainerViewModel()
{
// Create a single node in the collection of root nodes
RootNodes = new ObservableCollection<TreeNodeViewModel>();
RootNodes.Add(new TreeNodeViewModel());
}
}
public class TreeNodeViewModel
{
public ObservableCollection<TreeNodeViewModel> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在上面使用了一个ObservableCollection <>,但使用像List <>这样便宜的东西可能更有意义,因为你不希望集合发生变化(至少在你的场景中).
我认为您的问题是您的分层数据模板仅应用于根节点,因此您永远不会看到根节点之外的任何内容。试试这个:
<UserControl.Resources>
<HierarchicalDataTemplate DataType="{x:Type TreeNode}" ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</UserControl.Resources>
<Grid>
<TreeView ItemsSource="{Binding TreeRoot}"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
哪里TreeNode是你的树节点类的名称。