다음을 통해 공유


DataTemplateSelector 클래스

정의

데이터 개체 및 데이터 바인딩된 요소를 기반으로 선택할 DataTemplate 수 있는 방법을 제공합니다.

public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
상속
DataTemplateSelector

예제

이 예제에서 바인딩 소스는 개체 목록 Task 입니다. 개체의 Task 속성 중 하나는 .입니다 Priority. 두 개의 데이터 템플릿이 정의 myTaskTemplate 되어 있습니다 importantTaskTemplate.

데이터 개체의 DataTemplate 값을 기준으로 사용할 Priority를 선택하는 논리를 제공하기 위해, DataTemplateSelector의 서브클래스를 만들고 SelectTemplate 메서드를 재정의하십시오. 다음 예제에서는 Priority 속성의 값에 따라 적절한 템플릿을 반환하는 논리를 제공하는 메서드인 SelectTemplate 메서드를 설명합니다. 반환할 템플릿은 포괄하는 Window 요소의 리소스에서 찾을 수 있습니다.

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를 리소스로 선언할 수 있습니다.

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

템플릿 선택기 리소스를 사용하려면, ItemTemplateSelector 속성에 할당하십시오. ListBox는 기본 컬렉션의 각 항목에 대해 SelectTemplateTaskListDataTemplateSelector 메서드를 호출합니다. 이 호출은 데이터 개체를 항목 매개 변수로 전달합니다. 메서드에 의해 반환된 DataTemplate가 데이터 객체에 적용됩니다.

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

전체 샘플을 보려면 데이터 템플릿 샘플 소개를 참조하세요.

설명

일반적으로 동일한 형식의 개체에 대해 둘 DataTemplate 이상의 개체가 있고 각 데이터 개체의 속성에 따라 적용할 항목을 선택하는 DataTemplate 고유한 논리를 제공하려는 경우를 만듭니 DataTemplateSelector 다. 다른 형식의 개체가 있는 경우 에 속성을 DataTemplate설정할 DataType 수 있습니다. 이렇게 하면 .를 DataTemplateSelector만들 필요가 없습니다. 또한 형식이 같지만 속성이 다른 개체가 있는 경우 데이터 변환기 또는 데이터 변환기를 사용하는 DataTrigger 것도 고려할 수 있습니다. 자세한 내용은 데이터 템플릿 개요를 참조하세요.

템플릿 선택기를 만들려면 상속되는 클래스를 DataTemplateSelector 만들고 메서드를 재정의합니다 SelectTemplate . 클래스가 정의되면 요소의 템플릿 선택기 속성에 클래스 인스턴스를 할당할 수 있습니다.

생성자

Name Description
DataTemplateSelector()

DataTemplateSelector 클래스의 새 인스턴스를 초기화합니다.

메서드

Name Description
Equals(Object)

지정된 개체가 현재 개체와 같은지 여부를 확인합니다.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 사용됩니다.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type 가져옵니다.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
SelectTemplate(Object, DependencyObject)

파생 클래스에서 재정의되는 경우 사용자 지정 논리를 기반으로 반환 DataTemplate 합니다.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상