共用方式為


如何:將樹狀檢視繫結至未知深度的資料

有時候,您可能想要將 系結 TreeView 至其深度未知的資料來源。 當資料本質上是遞迴的,例如檔案系統、資料夾可以包含資料夾或公司的組織結構時,可能會發生此情況,其中員工有其他員工做為直接報告。

資料來源必須具有階層式物件模型。 例如,類別 Employee 可能包含 Employee 物件的集合,這些物件是員工的直接報告。 如果資料是以非階層式的方式表示,您必須建置資料的階層標記法。

當您設定 ItemsControl.ItemTemplate 屬性,如果 ItemsControl 產生 ItemsControl 每個子專案的 ,則子系 ItemsControl 會使用與父代相同的 ItemTemplate 。 例如,如果您在資料系結上設定 ItemTemplate 屬性,則每個 TreeViewItem 產生的 都會使用 DataTemplate 指派給 ItemTemplate 的 屬性 TreeViewTreeView

HierarchicalDataTemplate可讓您在資料範本上指定 ItemsSourceTreeViewItem 、 或任何 HeaderedItemsControl 的 。 當您設定 屬性時 HierarchicalDataTemplate.ItemsSource ,套用 時 HierarchicalDataTemplate 會使用該值。 藉由使用 HierarchicalDataTemplate ,您可以遞迴地設定 ItemsSource 中每個 TreeViewItemTreeView

範例

下列範例示範如何將 系結 TreeView 至階層式資料,並使用 HierarchicalDataTemplate 來指定 ItemsSource 每個 TreeViewItem 的 。 系 TreeView 結至代表公司員工之 XML 資料。 每個 Employee 元素都可以包含其他 Employee 元素,以指出誰向誰報告。 因為資料是遞迴的, HierarchicalDataTemplate 因此可以套用至每個層級。

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
    <XmlDataProvider x:Key="myCompany" XPath="Company/Employee">
      <x:XData>
        <Company xmlns="">
          <Employee Name="Don Hall">
            <Employee Name="Alice Ciccu">
              <Employee Name="David Pelton">
                <Employee Name="Vivian Atlas"/>
              </Employee>
              <Employee Name="Jeff Price"/>
              <Employee Name="Andy Jacobs"/>
            </Employee>
            <Employee Name="Bill Malone">
              <Employee Name="Maurice Taylor"/>
              <Employee Name="Sunil Uppal"/>
              <Employee Name="Qiang Wang"/>
            </Employee>
          </Employee>
        </Company>
      </x:XData>
    </XmlDataProvider>

    <!-- Bind the HierarchicalDataTemplate.ItemsSource property to the employees under
         each Employee element. -->
    <HierarchicalDataTemplate x:Key="EmployeeTemplate" 
                              ItemsSource="{Binding XPath=Employee}">
      <TextBlock Text="{Binding XPath=@Name}" ></TextBlock>
    </HierarchicalDataTemplate>

    <Style TargetType="TreeViewItem">
      <Setter Property="IsExpanded" Value="True"/>
    </Style>
  </Page.Resources>

  <Grid>
    <TreeView ItemsSource="{Binding Source={StaticResource myCompany}}" 
              ItemTemplate="{StaticResource EmployeeTemplate}"/>
  </Grid>
</Page>

另請參閱