WPF TreeView不显示箭头

时间:2013-12-13 12:24:04

标签: wpf mvvm

我遇到一个奇怪的问题,我无法弄清楚它来自哪里。

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

由于某些我无法理解的原因,当我添加根的子项(在我的示例中为Parents)时,箭头不会添加到根元素中。父母在那里,因为当我双击根时,它显示父母,但不显示箭头。

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

这是我用来显示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而言,没有什么特别之处。 ViewModel有一个Root元素集合(称为Roots,它绑定到ItemSource)。这个Roots类有一个名为Parents的Parent集合,其中有一个名为Children的Child集合。父母实现了INotifyPropertyChanged,它在我添加孩子时通知,对Root来说是一样的。

Example of the result

1 个答案:

答案 0 :(得分:0)

这应该被关闭,但以防其他人看到这个:

Joel Lucsy评论解决了这个问题。

此外:read only observable collection on msdn