我可以将WPF TreeView绑定到单个根节点吗?

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)

Emm*_*uel 9

我遇到了这个问题并得出结论,我无法将非集合绑定到树视图作为指定根节点的方法.所以我做的是快速更改我的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 <>这样便宜的东西可能更有意义,因为你不希望集合发生变化(至少在你的场景中).


Avi*_* P. 5

我认为您的问题是您的分层数据模板仅应用于根节点,因此您永远不会看到根节点之外的任何内容。试试这个:

<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是你的树节点类的名称。