我遇到一个奇怪的问题,我无法弄清楚它来自哪里。
我将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来说是一样的。
答案 0 :(得分:0)