TreeView控件是wpf中非常强大的树形控件。典型的用法如下:
<TreeView ScrollViewer.VerticalScrollBarVisibility="Auto" ItemsSource="{Binding Models}" VirtualizingStackPanel.IsVirtualizing="True",VirtualizingStackPanel.VirtualizationMode="Recycling">
<!--说明:VirtualizingStackPanel.IsVirtualizing和VirtualizingStackPanel.VirtualizationMode用于改善大数据量时的显示性能-->
<TreeView.Resources><HierarchicalDataTemplate DataType= "{x:Type vm:LeafVM}" ItemsSource = "{Binding Path=Children}">
<TextBlock>
<Run Text="{Binding Name}"></Run>
<Run>[</Run>
<Run Text="{Binding Number}"></Run>
<Run>]</Run>
</TextBlock>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type vm:CompositeVM}" ItemsSource="{Binding Path=Children}">
<TextBlock>
<Run Text="{Binding Name}"></Run>
<Run>[</Run>
<Run Text="{Binding Number}"></Run>
<Run>]</Run>
</TextBlock>
</HierarchicalDataTemplate>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True" />
</Style></TreeView.Resources>
</TreeView>
如以上所述,在使用TreeView时需要注意一些事项:
(1)HierarchicalDataTemplate 中,DataType中一定要使用具体类,而不要使用接口,否则测试时可能会显示不出来。曾踩过坑。
(2)Style标签中的TargetType可以为TreeViewItem,是针对TreeViewItem来设置相关Property。
(3)HirarchicalDataTemplate中的ItemsSource是为下一级项目提供的数据源,而不是为本级显示项提供的数据源。
(4)对于数量量比较大的TreeView,显示的时候会非常慢,给TreeView添加两个属性 VirtualizingStackPanel.IsVirtualizing="True",VirtualizingStackPanel.VirtualizationMode="Recycling"后,改善非常明显,显示就比较快了。