2013-12-13 150 views
0

我有一个奇怪的问题,我不知道它来自哪里。WPF TreeView不显示箭头

我将WPF中的TreeView绑定到对象结构。在开始时,TreeView是完全空的,然后我创建一个空的子项(来自用户操作)的根,然后添加子项(也来自用户操作)。

由于某些原因,我不明白,当我添加根的孩子(父母在我的例子中),箭头不会被添加到根元素。父母在那里,因为当我双击根目录时,它会显示父母,但不显示箭头。

与此同时,父母有“孩子”,对于那些没有问题,箭头显示,一切都很好。

下面是我用于显示的TreeView(简化)XAML:

<Grid> 
    <Grid.Resources> 
     <DataTemplate x:Key="ChildTemplate" 
         DataType="dom:Child"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Child: " /> 
       <TextBlock Text="{Binding Date}" /> 
      </StackPanel> 
     </DataTemplate> 

     <HierarchicalDataTemplate x:Key="ParentTemplate" 
            ItemsSource="{Binding Path=Children}" 
            ItemTemplate="{StaticResource ChildTemplate}" 
            DataType="dom:Parent"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Parent: " /> 
       <TextBlock Text="{Binding Point, StringFormat='point: {0:N2}'}" /> 
      </StackPanel> 
     </HierarchicalDataTemplate> 

     <HierarchicalDataTemplate x:Key="RootTemplate" 
            ItemsSource="{Binding Path=Parents}" 
            ItemTemplate="{StaticResource ParentTemplate}" 
            DataType="vm:RootViewModel"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Root: " /> 
       <TextBlock Text="{Binding Name}" Margin="5 0" /> 
      </StackPanel> 
     </HierarchicalDataTemplate> 
    </Grid.Resources> 
    <TreeView ItemsSource="{Binding Roots}" ItemTemplate="{StaticResource RootTemplate}"> 
     <TreeView.ItemContainerStyle> 
      <Style TargetType="{x:Type TreeViewItem}" BasedOn="{StaticResource MetroTreeViewItem}"> 
      <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
      </Style> 
     </TreeView.ItemContainerStyle> 
    </TreeView> 
</Grid> 

在视图模型而言,没有什么特别的。 ViewModel有一组根元素(称为Roots,它绑定到ItemSource)。而这个Roots类有一个名为Parent的集合,它有一个叫做Children的Child的集合。父母实施INotifyPropertyChanged,通知我何时为Root添加一个孩子,同样的事情。

Example of the result

+0

你能添加一些截图吗? – Noctis

+0

尝试设置'HierarchicalDataTemplate'上的'HierarchicalDataTemplate.DataType'属性。 – Sheridan

+0

添加了截屏,通过设置DataType进行测试,不会更改结果。 – Gimly

回答