HierarchicalDataTemplate

之前写控件模板的时候已经用过,当时觉得理解了,一下手,又有很多问题,有些概念不清楚,有些属性不知道什么意思,今天就细化一下

这是MSDN上的一个例子,在这个示例中, ListLeagueList 是 League 对象的列表。每 League 对象具有 Name 和 Division 对象的集合。每 Division 具有 Name 和 Team 对象的集合,因此,每 Team 对象具有 Name,就是这样一个数据结构

View Code
<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的集合

最终显示格式是这样的

纸上得来终觉浅,绝知此事要躬行

原文地址:https://www.cnblogs.com/goldren/p/2834540.html