다음을 통해 공유


DataTemplateSelector 클래스

정의

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

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

예제

이 예제에서는 바인딩 소스는 목록을 Task 개체입니다. 속성 중 하나를 Task 개체가 Priority합니다. 정의 하는 두 개의 데이터 템플릿이 myTaskTemplateimportantTaskTemplate입니다.

선택 하는 논리를 제공 DataTemplate 에 따라 사용 하는 Priority 값 데이터 개체의 서브 클래스를 만든 DataTemplateSelector 재정의 SelectTemplate 메서드. 다음 예제에서는 SelectTemplate 의 값을 기반으로 적절 한 템플릿을 반환 하는 논리를 제공 하는 메서드는 Priority 속성입니다. 반환할 템플릿은 상위의 리소스에 위치한 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. ListBox 호출을 SelectTemplate 메서드의 TaskListDataTemplateSelector 각 내부 컬렉션에서 항목에 대 한 합니다. 이 호출은 데이터 개체를 항목 매개 변수로 전달합니다. DataTemplate 에서 반환 하는 메서드가 데이터 개체에 적용 됩니다.

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

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

설명

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

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

생성자

DataTemplateSelector()

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

메서드

Equals(Object)

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

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

기본 해시 함수로 작동합니다.

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

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

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

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

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

파생 클래스에서 재정의된 경우 사용자 지정 논리에 따라 DataTemplate 을 반환합니다.

ToString()

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

(다음에서 상속됨 Object)

적용 대상