DataTemplateSelector.SelectTemplate(Object, DependencyObject) DataTemplateSelector.SelectTemplate(Object, DependencyObject) DataTemplateSelector.SelectTemplate(Object, DependencyObject) DataTemplateSelector.SelectTemplate(Object, DependencyObject) Method

정의

파생 클래스에서 재정의된 경우 사용자 지정 논리에 따라 DataTemplate을 반환합니다.When overridden in a derived class, returns a DataTemplate based on custom logic.

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

매개 변수

item
Object Object Object Object

템플릿을 선택할 데이터 개체입니다.The data object for which to select the template.

container
DependencyObject DependencyObject DependencyObject DependencyObject

데이터 바인딩된 개체입니다.The data-bound object.

반환

DataTemplate 또는 null를 반환합니다.Returns a DataTemplate or null. 기본값은 null입니다.The default value is null.

예제

이 예제에서는 바인딩 소스는 목록을 Task 개체입니다.In this example, the binding source is a list of Task objects. 속성 중 하나를 Task 개체가 Priority합니다.One of the properties of a Task object is Priority. 정의 하는 두 개의 데이터 템플릿이 myTaskTemplateimportantTaskTemplate입니다.There are two data templates defined, myTaskTemplate and importantTaskTemplate.

선택 하는 논리를 제공 DataTemplate 에 따라 사용 하는 Priority 값 데이터 개체의 서브 클래스를 만든 DataTemplateSelector 재정의 SelectTemplate 메서드.To supply logic to choose which DataTemplate to use based on the Priority value of the data object, create a subclass of DataTemplateSelector and override the SelectTemplate method. 다음 예제에서는 SelectTemplate 의 값을 기반으로 적절 한 템플릿을 반환 하는 논리를 제공 하는 메서드는 Priority 속성입니다.In the following example, the SelectTemplate method provides logic to return the appropriate template based on the value of the Priority property. 반환할 템플릿은 상위의 리소스에 위치한 Window 요소입니다.The template to return is found in the resources of the enveloping Window element.

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

그런 다음 TaskListDataTemplateSelector를 리소스로 선언할 수 있습니다.We can then declare the TaskListDataTemplateSelector as a resource:

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

템플릿 선택기 리소스를 사용 하려면 할당에 ItemTemplateSelector 의 속성을 ListBox.To use the template selector resource, assign it to the ItemTemplateSelector property of the ListBox. ListBox 호출을 SelectTemplate 메서드의 TaskListDataTemplateSelector 각 내부 컬렉션에서 항목에 대 한 합니다.The ListBox calls the SelectTemplate method of the TaskListDataTemplateSelector for each of the items in the underlying collection. 이 호출은 데이터 개체를 항목 매개 변수로 전달합니다.The call passes the data object as the item parameter. DataTemplate 에서 반환 하는 메서드가 데이터 개체에 적용 됩니다.The DataTemplate that is returned by the method is then applied to that data object.

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

전체 샘플을 보려면 Introduction to Data Templating Sample(데이터 템플릿 샘플 소개)을 참조하세요.For the complete sample, see Introduction to Data Templating Sample.

설명

일반적으로 사용자에 게 동일한 유형의 개체에 대해 정의 된 둘 이상의 데이터 템플릿이 템플릿 선택기를 사용 합니다.Typically, you use a template selector when you have more than one data template defined for the same type of objects. 예를 들어 바인딩 소스 목록인 경우 학생 개체의 목록을 비상근 학생에 게 특정 템플릿에 적용 하려고 합니다.For example, if your binding source is list a list of student objects and you want to apply a particular template to the part-time students. 상속 되는 클래스를 만들어 이렇게 DataTemplateSelector 재정의 SelectTemplate 메서드.You can do this by creating a class that inherits from DataTemplateSelector and overriding the SelectTemplate method. 클래스 정의 되 면 클래스의 인스턴스를 요소의 템플릿 선택기 속성에 할당할 수 있습니다.Once your class is defined you can assign an instance of the class to the template selector property of your element.

적용 대상