Aracılığıyla paylaş


DataTemplateSelector.SelectTemplate(Object, DependencyObject) Yöntem

Tanım

Türetilmiş bir sınıfta geçersiz kılındığında, özel mantığı temel alan bir DataTemplate döndürür.

public:
 virtual System::Windows::DataTemplate ^ SelectTemplate(System::Object ^ item, System::Windows::DependencyObject ^ container);
public virtual System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container);
abstract member SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
override this.SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
Public Overridable Function SelectTemplate (item As Object, container As DependencyObject) As DataTemplate

Parametreler

item
Object

Şablonun seçildiği veri nesnesi.

container
DependencyObject

Veriye bağlı nesne.

Döndürülenler

DataTemplate veya nulldöndürür. Varsayılan değer null değeridir.

Örnekler

Bu örnekte, bağlama kaynağı nesnelerin listesidir Task . Bir Task nesnenin özelliklerinden biri de şeklindedir Priority. tanımlanmış myTaskTemplate iki veri şablonu vardır ve importantTaskTemplate.

Veri nesnesinin DataTemplate değerine dayanarak hangi Priority kullanılacağını seçmek için, DataTemplateSelector sınıfının bir alt sınıfını oluşturun ve SelectTemplate yöntemini geçersiz kılın. Aşağıdaki örnekte, SelectTemplate metodu, Priority özellik değerine göre uygun şablonu döndürmek için bir mantık sağlar. Döndürülecek şablon, çevreleyen Window öğesinin kaynaklarında bulunur.

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

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

Ardından TaskListDataTemplateSelector öğesini bir kaynak olarak bildirebiliriz.

<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>

Şablon seçici kaynağını kullanmak için, ItemTemplateSelector özelliğini ListBox öğesine atayın. ListBox, temel alınan koleksiyondaki öğelerin her biri için SelectTemplate öğesinin TaskListDataTemplateSelector yöntemini çağırır. Çağrısı, veri nesnesini öğe parametresi olarak geçirir. Yöntem tarafından döndürülen DataTemplate, daha sonra bu veri nesnesine uygulanır.

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

Örneğin tamamı için bkz. Veri Şablon Oluşturma Örneğine Giriş.

Açıklamalar

Genellikle, aynı nesne türü için tanımlanmış birden fazla veri şablonunuz olduğunda bir şablon seçici kullanırsınız. Örneğin, bağlama kaynağınız öğrenci nesnelerinin listesini listelediyse ve yarı zamanlı öğrencilere belirli bir şablon uygulamak istiyorsanız. Yöntemini devralan DataTemplateSelector ve geçersiz kılan bir sınıf oluşturarak SelectTemplate bunu yapabilirsiniz. Sınıfınız tanımlandıktan sonra, öğesinin şablon seçici özelliğine sınıfının bir örneğini atayabilirsiniz.

Şunlara uygulanır