Aracılığıyla paylaş


Nasıl yapılır: Belirsiz Derinliğe Sahip Verilere TreeView Bağlama

Derinliği bilinmeyen bir veri kaynağına TreeView bağlamak istediğiniz zamanlar olabilir. Bu durum, verilerin özyinelemeli olması durumunda (örneğin, klasörlerin klasör içerebileceği bir dosya sistemi veya çalışanların doğrudan rapor olarak başka çalışanlara sahip olduğu bir şirketin kuruluş yapısı) ortaya çıkabilir.

Veri kaynağının hiyerarşik nesne modeli olmalıdır. Örneğin, bir Employee sınıfı, bir çalışanın doğrudan raporları olan çalışan nesnelerinin bir koleksiyonunu içerebilir. Veriler hiyerarşik olmayan bir şekilde gösteriliyorsa, verilerin hiyerarşik bir gösterimini oluşturmanız gerekir.

ItemsControl.ItemTemplate özelliğini ayarladığınızda ve ItemsControl her alt öğe için bir ItemsControl oluşturursa, alt ItemsControl, ebeveyniyle aynı ItemTemplate'ü kullanır. Örneğin, veriye bağlı bir ItemTemplateüzerinde TreeView özelliğini ayarlarsanız, oluşturulan her TreeViewItem, DataTemplate'ün ItemTemplate özelliğine atanmış olan TreeView'ü kullanır.

HierarchicalDataTemplate, veri şablonunda bir ItemsSourceveya herhangi bir TreeViewItemiçin HeaderedItemsControl belirtmenize olanak tanır. HierarchicalDataTemplate.ItemsSource özelliğini ayarladığınızda, HierarchicalDataTemplate uygulandığında bu değer kullanılır. HierarchicalDataTemplatekullanarak, ItemsSourceiçindeki her TreeViewItem için TreeView tekrarlı olarak ayarlayabilirsiniz.

Örnek

Aşağıdaki örnek, hiyerarşik verilere bir TreeView bağlamayı ve her HierarchicalDataTemplateiçin ItemsSource belirtmek üzere bir TreeViewItem kullanmayı gösterir. TreeView, bir şirketteki çalışanları temsil eden XML verilerine bağlanır. Her Employee öğesi, kimin kime rapor ettiğini göstermek için başka Employee öğeleri içerebilir. Veriler özyinelemeli olduğundan HierarchicalDataTemplate her 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 bakınız