Aracılığıyla paylaş


Veri Şablonu Özeti

WPF Veri templating modeli, verilerin sunuyu tanımlamak için mükemmel esneklik sağlar WPFdenetimleri veri sunusunu özelleştirme desteklemek için yerleşik bir işleve sahiptir. Bu konuda ilk nasıl tanımlandığını gösterir bir DataTemplate ve daha sonra özel mantık ve hiyerarşik veri görünümünü desteğine dayalı şablonları seçimi gibi diğer veri templating özellikleri tanıtır

Bu konu aşağıdaki bölümleri içerir.

  • Prerequisites
  • Veri Templating temelleri
  • Daha DataTemplate ekleme
  • Veri nesnesinin özelliklerine göre DataTemplate seçme
  • Stil ve Templating bir ItemsControl
  • Hiyerarşik veri desteği
  • İlgili Konular

Prerequisites

Bu konuda veri templating özellikleri üzerinde odaklanır ve veri bağlama kavramlara giriş değildir. Basit veri bağlama kavramları hakkında daha fazla bilgi için bkz: Veri Bağlama Genel Bakış.

DataTemplateVeri sunumu hakkında ve sağladığı birçok özelliklerinden biri olan WPF stil ve templating modeli. Bir giriş için WPF nasıl kullanılacağı gibi stil ve templating modeli bir Style denetimlerin özelliklerini ayarlamak için bkz: Stillendirme ve Şablon Oluşturma konu.

Buna ek olarak, bunu anlamak önemlidir Resources, aslında neler sağlar gibi nesneleri olan Style ve DataTemplate olacak yeniden kullanılabilir. For more information on resources, see Kaynaklara Genel Bakış.

Veri Templating temelleri

Bu bölüm aşağıdaki alt bölümleri içerir.

  • DataTemplate
  • Basit bir DataTemplate tanımlama
  • DataTemplate bir kaynak olarak oluşturma
  • DataType özelliği

Nedenini göstermek için DataTemplate önemlidir, diyelim izlenecek yol bir veri bağlama örneği. Bu örnekte, biz sahip bir ListBox listesine bağlı Task nesneler. Her Task nesnesinin bir TaskName (dize) bir Description (dize), bir Priority (int) ve türünde bir özellik TaskType, olduğu bir Enum değerleri ile Home ve Work.

<Window x:Class="SDKSample.Window1"
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="clr-namespace:SDKSample"
  Title="Introduction to Data Templating Sample">
  <Window.Resources>
    <local:Tasks x:Key="myTodoList"/>


...



</Window.Resources>
  <StackPanel>
    <TextBlock Name="blah" FontSize="20" Text="My Task List:"/>
    <ListBox Width="400" Margin="10"
             ItemsSource="{Binding Source={StaticResource myTodoList}}"/>


...


  </StackPanel>
</Window>

DataTemplate

Olmadan bir DataTemplate, bizim ListBox şu anda görünümler böyle:

Veri şablonu oluşturma örnek ekran görüntüsü

Herhangi belirli yönergeler ise neler olduğunu ListBox varsayılan çağrılar tarafından ToString zaman çalışıyor görüntüleme nesneleri koleksiyonu. Bu nedenle, Task Nesne geçersiz kılmaları ToString yöntemi, daha sonra ListBox her kaynak nesneyi alttaki koleksiyonu dize halinde temsilini görüntüler

Örneğin, Task geçersiz kılar sınıf ToString yöntemi bu şekilde burada name için alan TaskName özelliği:

Public Overrides Function ToString() As String
    Return _name.ToString()
End Function
public override string ToString()
{
    return name.ToString();
}

Sonra ListBox görünümler şunları istiyor:

Veri şablonu oluşturma örnek ekran görüntüsü

Ancak, sınırlandırma ve esnek olmayan olmasıdır. Ayrıca, için bağlıyorsanız XML verileri, size istemeyeceğiniz geçersiz kılmak için ToString.

Basit bir DataTemplate tanımlama

Çözümüdür tanımlamak için bir DataTemplate. Bunu yapmanın bir yolu olduğu için ItemTemplate özelliği ListBox için bir DataTemplate. İçinde belirttiğiniz sizin DataTemplate olur görsel yapısı veri nesnesi. Aşağıdaki DataTemplate ise oldukça basit. Biz her madde üç görünen yönergeleri vererek TextBlock içindeki öğeler bir StackPanel. Her TextBlock öğesi bir özelliğine bağlı olduğu Task sınıfa

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}">
   <ListBox.ItemTemplate>
     <DataTemplate>
       <StackPanel>
         <TextBlock Text="{Binding Path=TaskName}" />
         <TextBlock Text="{Binding Path=Description}"/>
         <TextBlock Text="{Binding Path=Priority}"/>
       </StackPanel>
     </DataTemplate>
   </ListBox.ItemTemplate>
 </ListBox>

Bu konudaki örnekleri için temel verilerin topluluğudur CLR nesneler. İçin bağlıyorsanız XML verileri temel kavramları aynı, ancak bir hafif sözdizimi farklılık. Örneğin, yerine Path=TaskNameayarlamak XPath için @TaskName (, TaskName bir özniteliktir sizin XML düğümü).

Şimdi bizim ListBox görünümler şunları istiyor:

Veri şablonu oluşturma örnek ekran görüntüsü

DataTemplate bir kaynak olarak oluşturma

Biz Yukarıdaki örnekte tanımlanan DataTemplate satır içi. Aşağıdaki örnekte olduğu gibi yeniden kullanılabilir bir nesne olabilir Kaynaklar bölümünde tanımlamak için daha yaygın kullanılır:

<Window.Resources>


...


<DataTemplate x:Key="myTaskTemplate">
  <StackPanel>
    <TextBlock Text="{Binding Path=TaskName}" />
    <TextBlock Text="{Binding Path=Description}"/>
    <TextBlock Text="{Binding Path=Priority}"/>
  </StackPanel>
</DataTemplate>


...


</Window.Resources>

Siz artık myTaskTemplate Aşağıdaki örnekte olduğu gibi bir kaynak:

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}"
         ItemTemplate="{StaticResource myTaskTemplate}"/>

Çünkü myTaskTemplate bir kaynağı şimdi götüren bir özelliğine sahip diğer denetimlere kullanabilmek için bir DataTemplate türü. Yukarıda gösterildiği, için ItemsControl nesneleri, ListBox, bu ItemTemplate özelliği. İçin ContentControl nesneleri, bu ContentTemplate özelliği.

DataType özelliği

DataTemplate Sınıfı olan bir DataType çok benzer özellik TargetType özelliği Style sınıfa Bu nedenle belirtmek yerine bir x:Key için DataTemplate Yukarıdaki örnekte, aşağıdaki işlemleri yapabilirsiniz:

<DataTemplate DataType="{x:Type local:Task}">
  <StackPanel>
    <TextBlock Text="{Binding Path=TaskName}" />
    <TextBlock Text="{Binding Path=Description}"/>
    <TextBlock Text="{Binding Path=Priority}"/>
  </StackPanel>
</DataTemplate>

Bu DataTemplate uygulanan otomatik olarak tüm Task nesneler. Bu durumda dikkat x:Key örtülü olarak ayarlanmıştır. Bu nedenle, bu atarsanız, DataTemplate bir x:Key değeri, örtülü yazmak x:Key ve DataTemplate otomatik olarak uygulanacağını değil.

Bağlıyorsanız, bir ContentControl bir Task nesneleri, ContentControl kullanmaz yukarıdaki DataTemplate otomatik olarak. Çünkü binding üstündeki bir ContentControl gereken daha fazla bilgi için ayrım mı istediğiniz bağlama tüm bir koleksiyon veya tek bir nesne. Yoksa sizin ContentControl seçimini izleme bir ItemsControl türü, ayarlayabileceğiniz Path özelliği ContentControl bağlamak "/" Geçerli madde ilgi göstermek için. For an example, see Nasıl Yapılır: Koleksiyona Bağlama ve Seçim Temelinde Bilgi Görüntüleme. Aksi takdirde belirtmeye gerek DataTemplate açıkça ayarlayarak ContentTemplate özelliği.

DataType Özelliği olduğunda özellikle kullanışlı bir CompositeCollection farklı türdeki veri nesneleri. For an example, see Nasıl Yapılır: CompositeCollection Uygulama.

Daha DataTemplate ekleme

Şu anda gerekli bilgilerle veriler görünür ancak kesinlikle geliştirme için yer yoktur. Diyelim sunu üzerinde ekleyerek geliştirin bir Border, bir Gridve bazı TextBlock görüntülenen verileri tanımlayan öğeleri.


<DataTemplate x:Key="myTaskTemplate">
  <Border Name="border" BorderBrush="Aqua" BorderThickness="1"
          Padding="5" Margin="5">
    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
      </Grid.ColumnDefinitions>
      <TextBlock Grid.Row="0" Grid.Column="0" Text="Task Name:"/>
      <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=TaskName}" />
      <TextBlock Grid.Row="1" Grid.Column="0" Text="Description:"/>
      <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Description}"/>
      <TextBlock Grid.Row="2" Grid.Column="0" Text="Priority:"/>
      <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Priority}"/>
    </Grid>
  </Border>


...


</DataTemplate>

Aşağıdaki ekran görüntüsü gösterilmiştir ListBox Bu değişiklik DataTemplate:

Veri şablonu oluşturma örnek ekran görüntüsü

Biz ayarlayabilirsiniz HorizontalContentAlignment için Stretch , ListBox öğelerin genişliği tüm yer alır emin olmak için:

<ListBox Width="400" Margin="10"
     ItemsSource="{Binding Source={StaticResource myTodoList}}"
     ItemTemplate="{StaticResource myTaskTemplate}" 
     HorizontalContentAlignment="Stretch"/>

İle HorizontalContentAlignment özelliðini Stretch, ListBox Şimdi görünümler böyle:

Veri şablonu oluşturma örnek ekran görüntüsü

Özellik değerleri uygulamak için DataTriggers kullanın

Geçerli sunu olup bize değil bir Task Ev bir görevi veya bir office görev. Unutmayın Task nesnesinin bir TaskType türünde özellik TaskType, bir numaralandırma değerlerine sahip olduğu Home ve Work.

Aşağıdaki örnekte, DataTrigger Ayarlar BorderBrush adlı öğesinin border için Yellow , TaskType özelliği TaskType.Home.

<DataTemplate x:Key="myTaskTemplate">


...


<DataTemplate.Triggers>
  <DataTrigger Binding="{Binding Path=TaskType}">
    <DataTrigger.Value>
      <local:TaskType>Home</local:TaskType>
    </DataTrigger.Value>
    <Setter TargetName="border" Property="BorderBrush" Value="Yellow"/>
  </DataTrigger>
</DataTemplate.Triggers>


...


</DataTemplate>

Şimdi bizim uygulama aşağıdaki gibi arar. Ev görevler sarı kenarlık görüntülenir ve office görevler ile aqua bir kenarlık görüntülenir:

Veri şablonu oluşturma örnek ekran görüntüsü

Bu örnekte DataTrigger kullanan bir Setter ayarlamak bir özellik değeri. Tetikleyici de sahip sınıfları EnterActions ve ExitActions özellikleri, gibi eylemler kümesini başlatmak izinanimasyonlar. Buna ek olarak, ayrıca vardır bir MultiDataTrigger sınıf seçmenize olanak sağlayan uygulama değişiklikleri temel alan birden çok veri ilişkili özellik değerleri.

Aynı etkiyi elde etmek üzere alternatif bir yol bağlayacaktır BorderBrush özelliğine TaskType özelliği ve rengi geri dönmek için bir değer dönüştürücüsü esas kullanım TaskType değer. Dönüştürücü kullanarak yukarıdaki efekt oluşturarak performans açısından biraz daha etkilidir. Kendi mantığını sağlamış olursunuz çünkü Ayrıca, kendi dönüştürücü oluşturma size daha fazla esneklik sağlar. Sonuçta, seçtiğiniz hangi tekniği senaryonuza ve tercihinize bağlıdır. Dönüştürücü yazma hakkında daha fazla bilgi için bkz: IValueConverter.

Ne bir DataTemplate ait?

Önceki örnekte, biz tetikleyici içinde yerleştirilmiş DataTemplate kullanarak DataTemplate.Triggers özelliği. Setter Tetikleyici bir öğenin bir özelliğin değerini ayarlar ( Border öğesi) içinde olduğunu DataTemplate. Ancak, özellikleri, sizin Setters ile endişe içinde geçerli olan öðelerini özelliklerinin DataTemplate, kullanarak özellikleri ayarlamak daha uygun olabilir bir Style için hazırlanan ListBoxItem sınıfı (bağlama denetimi ise bir ListBox). İstediğiniz, örneğin, kendi Trigger animasyon uygulamak için Opacity değer bir fare, bir maddeye işaret ettiğinde maddenin Tetikleyicileri içinde tanımladığınız bir ListBoxItem stili. Bir örnek için bkz: stil ve Templating örnek giriş.

Genel olarak, unutmayın DataTemplate uygulandığı her üretilen ListBoxItem (gerçekte nasıl ve nerede uygulandığı hakkında daha fazla bilgi için bkz: ItemTemplate sayfası.). Sizin DataTemplate olduğu düşünüldüğünde yalnızca sunu ve görünümünü veri nesneleri. Çoğu durumda, bir öğe gibi sununun tüm yönleriyle bakar gibi seçildiğinde veya nasıl ListBox Tümle öğeleri tanımında ait değil bir DataTemplate. Bir örnek için bkz: stil ve Templating bir ItemsControl bölüm.

Veri nesnesinin özelliklerine göre DataTemplate seçme

De DataType özelliği bölümünde, biz ele farklı veri şablonları farklı veri nesneleri tanımlayabilirsiniz. Yani özellikle yararlı olduğunda bir CompositeCollection farklı türleri veya koleksiyonları öğelerle farklı türleri. De Özellik değerlerini uygulamak için kullanmak DataTriggers bölümünde, biz gösterilen aynı tür veri nesnelerinin bir koleksiyonu varsa, oluşturabilirsiniz bir DataTemplate ve Tetikleyicileri uygulama değişiklikleri esas alan özellik değerleri her veri nesnesi. Tetikleyiciler, özellik değerleri uygulamak veya animasyonlar başlatmak izin ancak, bunlar veri nesneleri yapısını yeniden yapılandırma esnekliği vermeyin. Bazı senaryolar farklı oluşturmanızı gerektirebilir DataTemplate veri nesneleri aynı olan yazın ancak sahip farklı özellikler.

Örneğin, ne zaman bir Task nesnesinin bir Priority değeri 1, kendiniz için bir uyarı olarak sunmak için tamamen farklı bir görünüm vermek isteyebilirsiniz. Bu durumda, oluşturduğunuz bir DataTemplate yüksek öncelikli görüntülenmesi için Task nesneler. Bakalım şu ekleme DataTemplate kaynakları bölümüne:

<DataTemplate x:Key="importantTaskTemplate">
  <DataTemplate.Resources>
    <Style TargetType="TextBlock">
      <Setter Property="FontSize" Value="20"/>
    </Style>
  </DataTemplate.Resources>
  <Border Name="border" BorderBrush="Red" BorderThickness="1"
          Padding="5" Margin="5">
    <DockPanel HorizontalAlignment="Center">
      <TextBlock Text="{Binding Path=Description}" />
      <TextBlock>!</TextBlock>
    </DockPanel>
  </Border>
</DataTemplate>

Bu örnek kullanır fark DataTemplate.Resources özelliği. Bölümü paylaşılan, içindeki öğeler tarafından tanımlanan kaynakları DataTemplate.

Seçin bir mantık sağlamak için DataTemplate kullanmak için temel Priority değer veri nesnesi, alt sınıfı oluşturmak DataTemplateSelector ve geçersiz kılma SelectTemplate yöntemi. Aşağıdaki örnekte, SelectTemplate yöntemi sağlar değere göre uygun şablon dönmek için mantık Priority özelliği. Verilecek şablonu enveloping kaynaklarında bulunan Window öğesi.


Namespace SDKSample
    Public Class TaskListDataTemplateSelector
        Inherits DataTemplateSelector
        Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate

            Dim element As FrameworkElement
            element = TryCast(container, FrameworkElement)

            If element IsNot Nothing AndAlso item IsNot Nothing AndAlso TypeOf item Is Task Then

                Dim taskitem As Task = TryCast(item, Task)

                If taskitem.Priority = 1 Then
                    Return TryCast(element.FindResource("importantTaskTemplate"), DataTemplate)
                Else
                    Return TryCast(element.FindResource("myTaskTemplate"), DataTemplate)
                End If
            End If

            Return Nothing
        End Function
    End Class
End Namespace
using System.Windows;
using System.Windows.Controls;

namespace SDKSample
{
    public class TaskListDataTemplateSelector : DataTemplateSelector
    {
        public override DataTemplate
            SelectTemplate(object item, DependencyObject container)
        {
            FrameworkElement element = container as FrameworkElement;

            if (element != null && item != null && item is Task)
            {
                Task taskitem = item as Task;

                if (taskitem.Priority == 1)
                    return
                        element.FindResource("importantTaskTemplate") as DataTemplate;
                else
                    return
                        element.FindResource("myTaskTemplate") as DataTemplate;
            }

            return null;
        }
    }
}

Biz sonra bildirebilirsiniz TaskListDataTemplateSelector kaynak:

<Window.Resources>


...


<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>


...


</Window.Resources>

Şablon Seçici kaynak kullanmak için atıyorum ItemTemplateSelector özelliği ListBox. ListBox Çağrıları SelectTemplate yöntemi, TaskListDataTemplateSelector her maddelerin temel bir koleksiyon. Çağrı veri nesnesi öğesini parametre olarak iletir. DataTemplate Tarafından döndürülen yöntemi daha sonra bu veri nesnesi. uygulanan

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}"
         ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
         HorizontalContentAlignment="Stretch"/>

Şablon Seçici yerinde ile ListBox Şimdi aşağıdaki gibi görünür:

Veri şablonu oluşturma örnek ekran görüntüsü

Bu, bu örnek tartýþmamýzý varıyor. Tam örnek için bkz: Templating örnek veri giriş.

Stil ve Templating bir ItemsControl

Olsa bile ItemsControl kullanabileceğiniz Denetim türü değil bir DataTemplate bağlamak için çok sık karşılaşılan bir senaryo olduğu, bir ItemsControl koleksiyonu. De Ait bir DataTemplate, ne biz anlatıldığı bölüm tanımı sizin DataTemplate sadece olması gereken veri sunumu ile ilgili Ne zaman kullanmak üzere uygun değil bilmek için bir DataTemplate tarafından sağlanan farklı stil ve şablon özelliklerini anlamak önemlidir ItemsControl. Aşağıdaki örnek, bu özelliklerin her birine işlevini göstermek için tasarlanmıştır. ItemsControl Bu örnekte bağlı olduğu aynı Tasks koleksiyonunda olarak önceki bir örnek. Sunum için amaçları, stilleri ve bu örnek şablonlarda bildirilen tüm satır içi dir.

<ItemsControl Margin="10"
              ItemsSource="{Binding Source={StaticResource myTodoList}}">
  <!--The ItemsControl has no default visual appearance.
      Use the Template property to specify a ControlTemplate to define
      the appearance of an ItemsControl. The ItemsPresenter uses the specified
      ItemsPanelTemplate (see below) to layout the items. If an
      ItemsPanelTemplate is not specified, the default is used. (For ItemsControl,
      the default is an ItemsPanelTemplate that specifies a StackPanel.-->
  <ItemsControl.Template>
    <ControlTemplate TargetType="ItemsControl">
      <Border BorderBrush="Aqua" BorderThickness="1" CornerRadius="15">
        <ItemsPresenter/>
      </Border>
    </ControlTemplate>
  </ItemsControl.Template>
  <!--Use the ItemsPanel property to specify an ItemsPanelTemplate
      that defines the panel that is used to hold the generated items.
      In other words, use this property if you want to affect
      how the items are laid out.-->
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <!--Use the ItemTemplate to set a DataTemplate to define
      the visualization of the data objects. This DataTemplate
      specifies that each data object appears with the Proriity
      and TaskName on top of a silver ellipse.-->
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <DataTemplate.Resources>
        <Style TargetType="TextBlock">
          <Setter Property="FontSize" Value="18"/>
          <Setter Property="HorizontalAlignment" Value="Center"/>
        </Style>
      </DataTemplate.Resources>
      <Grid>
        <Ellipse Fill="Silver"/>
        <StackPanel>
          <TextBlock Margin="3,3,3,0"
                     Text="{Binding Path=Priority}"/>
          <TextBlock Margin="3,0,3,7"
                     Text="{Binding Path=TaskName}"/>
        </StackPanel>
      </Grid>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
  <!--Use the ItemContainerStyle property to specify the appearance
      of the element that contains the data. This ItemContainerStyle
      gives each item container a margin and a width. There is also
      a trigger that sets a tooltip that shows the description of
      the data object when the mouse hovers over the item container.-->
  <ItemsControl.ItemContainerStyle>
    <Style>
      <Setter Property="Control.Width" Value="100"/>
      <Setter Property="Control.Margin" Value="5"/>
      <Style.Triggers>
        <Trigger Property="Control.IsMouseOver" Value="True">
          <Setter Property="Control.ToolTip"
                  Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                          Path=Content.Description}"/>
        </Trigger>
      </Style.Triggers>
    </Style>
  </ItemsControl.ItemContainerStyle>
</ItemsControl>

Onu işlenirken örneğin bir ekran görüntüsü aşağıdadır:

ItemsControl example ekran görüntüsü

Yerine dikkat ItemTemplate, kullanabileceğiniz ItemTemplateSelector. Bir örnek için önceki bölüme bakın. Benzer şekilde, yerine ItemContainerStyle, kullanma seçeneğine sahip ItemContainerStyleSelector.

İki diğer stil ile ilgili özelliklerini ItemsControl , gösterilmedi burada GroupStyle ve GroupStyleSelector.

Hiyerarşik veri desteği

Şu ana kadar sadece bağlayabilir ve tek bir koleksiyon görüntülemek nasıl incelemiştik. Bazen diğer koleksiyonu içeren bir koleksiyon vardır. HierarchicalDataTemplate Sınıfı ile kullanılabilecek şekilde tasarlanmıştır HeaderedItemsControl türlerini görüntüleme gibi veri. Aşağıdaki örnekte, ListLeagueList listesi League nesneler. Her League nesnesinin bir Name ve topluluğu Division nesneler. Her Division olan bir Name ve topluluğu Team nesneleri ve her Team nesnesinin bir Name.

<Window x:Class="SDKSample.Window1"
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://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>

İle kullanımını gösteren örnek HierarchicalDataTemplate, liste verilerini içeren kolayca görüntüleyebilirsinizdiğer listeleri. The following is a screenshot of the example.

HierarchicalDataTemplate örnek ekran görüntüsü

Ayrıca bkz.

Görevler

Nasıl Yapılır: DataTemplate ile Üretilen Öğeleri Bulma

Kavramlar

Performans İyileştirme Veri Bağlama

Stillendirme ve Şablon Oluşturma

Veri Bağlama Genel Bakış

GridView Sütun Üstbilgi Stil ve Şablonlarına Genel Bakış