Nasıl yapılır: Belirlenemeyen Derinliğe Sahip Veriyi TreeView'a Bağlama

Derinliği bilinmese de bir veri TreeView kaynağına bağlamak istediğiniz zamanlar olabilir. Bu durum, verilerin doğası gereği, örneğin klasörlerin klasör içerenin bulunduğu bir dosya sistemi veya çalışanların doğrudan rapor olarak başka çalışanları olan bir şirketin kuruluş yapısı gibi bir ifadeyle ortaya çıkabilir.

Veri kaynağının hiyerarşik bir nesne modeli olması gerekir. Örneğin, bir Employee sınıf bir çalışanın doğrudan raporları olan Employee nesnelerinin bir koleksiyonunu içerebilir. Veriler hiyerarşik değil bir şekilde temsil edildiyse, verilerin hiyerarşik bir gösterimini derlemelisiniz.

özelliğini ayarsanız ve her alt öğe için bir oluşturulursa, alt öğe ItemsControl.ItemTemplateItemsControl üst ItemsControlItemsControlItemTemplate öğeyle aynı değeri kullanır. Örneğin, özelliğini bir veriye bağlı olarak ayarsanız, oluşturulan her biri ItemTemplateTreeViewTreeViewItemDataTemplate özelliğine atanmış ItemTemplate olan 'i TreeView kullanır.

HierarchicalDataTemplate, veri şablonunda bir veya herhangi bir ItemsSource için TreeViewItemHeaderedItemsControl belirtmenizi sağlar. özelliğini ayar HierarchicalDataTemplate.ItemsSource her ayarda bu değer HierarchicalDataTemplate uygulandığında kullanılır. bir HierarchicalDataTemplate kullanarak, içinde her biri için için tekrar ItemsSource tekrar TreeViewItemTreeView ayarlayın.

Örnek

Aşağıdaki örnekte, hiyerarşik verilere bir bağlama ve her için belirtmek üzere TreeView bir kullanma adımları yer HierarchicalDataTemplateItemsSourceTreeViewItem almaktadır. , TreeView bir şirketin çalışanlarını temsil eden XML verilerine bağlanıyor. Her Employee öğe, kime Employee rapor vereni belirtmek için başka öğeler içerebilir. Verilercursive olduğundan, her HierarchicalDataTemplate düzeye uygulanabilir.

<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>

Ayrıca bkz.