之前写控件模板的时候已经用过,当时觉得理解了,一下手,又有很多问题,有些概念不清楚,有些属性不知道什么意思,今天就细化一下
这是MSDN上的一个例子,在这个示例中, ListLeagueList 是 League 对象的列表。每 League 对象具有 Name 和 Division 对象的集合。每 Division 具有 Name 和 Team 对象的集合,因此,每 Team 对象具有 Name,就是这样一个数据结构

<Window x:Class="SDKSample.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="HierarchicalDataTemplate Sample" xmlns:src="clr-namespace:SDKSample"> <DockPanel> <DockPanel.Resources> <src:ListLeagueList x:Key="MyList"/> <HierarchicalDataTemplate DataType = "{x:Type src:League}" ItemsSource = "{Binding Path=Divisions}"> <TextBlock Text="{Binding Path=Name}"/> </HierarchicalDataTemplate> <HierarchicalDataTemplate DataType = "{x:Type src:Division}" ItemsSource = "{Binding Path=Teams}"> <TextBlock Text="{Binding Path=Name}"/> </HierarchicalDataTemplate> <DataTemplate DataType="{x:Type src:Team}"> <TextBlock Text="{Binding Path=Name}"/> </DataTemplate> </DockPanel.Resources> <Menu Name="menu1" DockPanel.Dock="Top" Margin="10,10,10,10"> <MenuItem Header="My Soccer Leagues" ItemsSource="{Binding Source={StaticResource MyList}}" /> </Menu> <TreeView> <TreeViewItem ItemsSource="{Binding Source={StaticResource MyList}}" Header="My Soccer Leagues" /> </TreeView> </DockPanel> </Window>
所谓HierarchicalDataTemplate ,按字面意思理解,就是分层数据模板,专门用来定义分层的数据类型显示格式的一个模板,最常用的就是TreeView、Menu,
挨个属性解释,
DataType 指当前模板对应哪种数据类型,也就是说哪个数据类型的数据进来后用此种格式显示
ItemsSource 当前类型的子项集合取哪个属性,这个属性应该是个IEnumerable类型的
然后就没什么了
标签内定义显示的具体格式,用什么空间显示,绑定哪个字段属性
当然 给控件赋值的时候一般是这种格式
TreeView.ItemsSource=.....
等号右边是一个IEnumerable类型的,里面的项会作为控件的数据源,项的集合就是控件Item的集合
最终显示格式是这样的
纸上得来终觉浅,绝知此事要躬行