다음을 통해 공유


DataTemplate 클래스

정의

데이터 개체의 표시 구조에 대해 설명합니다. 데이터 값을 표시하는 템플릿의 특정 요소에 데이터 바인딩을 사용합니다.

/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate, IElementFactory
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate, IElementFactory
Public Class DataTemplate
Inherits FrameworkTemplate
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
<DataTemplate ...>
  templateContent
</DataTemplate>
 

상속
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
특성
구현

Windows 요구 사항

디바이스 패밀리
Windows 10 (10.0.10240.0에서 도입되었습니다.)
API contract
Windows.Foundation.UniversalApiContract (v1.0에서 도입되었습니다.)

예제

다음 예제에서는 DataTemplate을 사용하여 ListBox의 항목을 표시합니다. 이 예제에서 ListBox 는 개체 컬렉션 Customer 에 바인딩됩니다. DataTemplate에는 , LastNameAddress 속성에 바인딩하는 TextBlock 컨트롤이 FirstName포함되어 있습니다. 데이터 바인딩에 대한 자세한 내용은 데이터 바인딩 심층 정보를 참조하세요.

<Grid>
    <Grid.Resources>
        <src:Customers x:Key="customers"/>
    </Grid.Resources>

    <ListBox ItemsSource="{StaticResource customers}" Width="350" Margin="0,5,0,10">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Padding="5,0,5,0"
          Text="{Binding FirstName}" />
                    <TextBlock Text="{Binding LastName}" />
                    <TextBlock Text=", " />
                    <TextBlock Text="{Binding Address}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>
public class Customer
{
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public String Address { get; set; }

    public Customer(String firstName, String lastName, String address)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Address = address;
    }

}

public class Customers : ObservableCollection<Customer>
{
    public Customers()
    {
        Add(new Customer("Michael", "Anderberg",
                "12 North Third Street, Apartment 45"));
        Add(new Customer("Chris", "Ashton",
                "34 West Fifth Street, Apartment 67"));
        Add(new Customer("Seo-yun", "Jun",
                "56 East Seventh Street, Apartment 89"));
        Add(new Customer("Guido", "Pica",
                "78 South Ninth Street, Apartment 10"));
    }

}
Public Class Customer
    Private _firstName As String
    Private _lastName As String
    Private _address As String

    Public Property FirstName() As String
        Get
            Return _firstName
        End Get

        Set(ByVal value As String)
            _firstName = value
        End Set
    End Property

    Public Property LastName() As String
        Get
            Return _lastName
        End Get

        Set(ByVal value As String)
            _lastName = value
        End Set
    End Property

    Public Property Address() As String
        Get
            Return _address
        End Get

        Set(ByVal value As String)
            _address = value
        End Set
    End Property

    Public Sub New(ByVal firstName As String, ByVal lastName As String, ByVal address As String)
        Me.FirstName = firstName
        Me.LastName = lastName
        Me.Address = address
    End Sub

End Class

Public Class Customers
    Inherits ObservableCollection(Of Customer)

    Public Sub New()
        Add(New Customer("Michael", "Anderberg", "12 North Third Street, Apartment 45"))
        Add(New Customer("Chris", "Ashton", "34 West Fifth Street, Apartment 67"))
        Add(New Customer("Seo-yun", "Jun", "56 East Seventh Street, Apartment 89"))
        Add(New Customer("Guido", "Pica", "78 South Ninth Street, Apartment 10"))
    End Sub

End Class

설명

DataTemplate 개체는 다음 속성의 값으로 사용됩니다.

일반적으로 DataTemplate을 사용하여 데이터의 시각적 표현을 지정합니다. DataTemplate 개체는 ListBox와 같은 ItemsControl을 전체 컬렉션에 바인딩할 때 특히 유용합니다. 특정 지침이 없으면 ListBox 는 컬렉션에 있는 개체의 문자열 표현을 표시합니다. DataTemplate을 사용하여 각 데이터 개체의 모양을 정의합니다. DataTemplate의 콘텐츠는 데이터 개체의 시각적 구조가 됩니다.

일반적으로 DataTemplate에서 데이터 바인딩을 사용합니다. 예를 들어 ListBox 가 개체 컬렉션 Customer 에 바인딩되고 ItemTemplate 속성이 DataTemplate 으로 설정되어 있다고 가정합니다. ListBox를 만들면 컬렉션의 각 Customer 항목에 대해 ListBoxItem이 만들어지고 ListBoxItemDataContext가 적절한 고객으로 설정됩니다. 즉, 첫 번째 ListBoxItemDataContext는 첫 번째 고객으로 설정되고 두 번째 ListBoxItemDataContext는 두 번째 고객으로 설정됩니다. DataTemplate의 요소를 바인딩하여 각 Customer 개체에서 제공되는 속성 값을 표시할 수 있습니다.

DataTemplate을 사용하여 여러 ContentControl 개체에서 UIElement 개체를 공유할 수도 있습니다. 예를 들어 동일한 그래픽을 사용하려면 애플리케이션에 여러 단추가 필요하다고 가정합니다. 그래픽이 포함된 DataTemplate을 만들고 단추의 ContentTemplate 으로 사용할 수 있습니다. ContentTemplate에 대한 데이터 템플릿은 데이터 바인딩을 사용할 수도 있습니다. 그러나 이 경우 데이터 컨텍스트는 템플릿이 적용된 요소와 동일합니다. 일반적으로 하나의 데이터 개체이며 항목의 개념이 없습니다.

DataTemplate을 XAML에서 ItemTemplate 속성 요소의 직접 자식으로 배치할 수 있습니다. 이는 인라인 템플릿 으로 알고 있으며, UI의 다른 영역에 동일한 데이터 템플릿을 사용할 필요가 없는 경우 이 작업을 수행합니다. DataTemplate을 리소스로 정의한 다음 ItemTemplate 속성 값으로 리소스를 참조할 수도 있습니다. 리소스가 되면 데이터 템플릿이 필요한 여러 UI 요소에 동일한 템플릿을 사용할 수 있습니다. 데이터 템플릿을 Application.Resources로 팩터링하는 경우 UI의 여러 페이지에 대해 동일한 템플릿을 공유할 수도 있습니다.

데이터 템플릿의 콘텐츠에 대한 XAML 사용은 settable 코드 속성으로 노출되지 않습니다. DataTemplate에 대한 XAML 처리에 기본 제공되는 특별한 동작입니다.

고급 데이터 바인딩 시나리오의 경우 데이터의 속성이 UI 표현을 생성해야 하는 템플릿을 결정하도록 할 수 있습니다. 이 시나리오에서는 DataTemplateSelector 를 사용하고 ItemTemplateSelector 와 같은 속성을 설정하여 데이터 뷰에 할당할 수 있습니다. DataTemplateSelector는 직접 작성하는 논리 클래스로, 데이터와 상호 작용하는 고유한 논리에 따라 바인딩 엔진에 정확히 하나의 DataTemplate을 반환하는 메서드가 있습니다. 자세한 내용은 데이터 바인딩 심층 분석을 참조하세요.

XAML 연결 속성

DataTemplate은 XAML 연결 속성의 호스트 서비스 클래스입니다.

연결된 속성에 대한 XAML 프로세서 액세스를 지원하고 동등한 getset 작업을 코드에 노출하기 위해 연결된 각 XAML 속성에는 Get 및 Set 접근자 메서드 쌍이 있습니다. 코드에서 값을 얻거나 설정하는 또 다른 방법은 GetValue 또는 SetValue 를 호출하고 식별자 필드를 종속성 속성 식별자로 전달하는 종속성 속성 시스템을 사용하는 것입니다.

연결된 속성 설명
ExtensionInstance 데이터 템플릿의 단계적 렌더링을 위한 도우미 메서드를 정의하는 확장 instance 가져오거나 설정합니다.

버전 기록

Windows 버전 SDK 버전 추가된 값
1809 17763 GetElement
1809 17763 RecycleElement

생성자

DataTemplate()

DataTemplate 클래스의 새 instance 초기화합니다.

속성

Dispatcher

이 개체가 연결된 CoreDispatcher 를 가져옵니다. CoreDispatcher는 코드가 비 UI 스레드에서 시작되더라도 UI 스레드에서 DependencyObject에 액세스할 수 있는 기능을 나타냅니다.

(다음에서 상속됨 DependencyObject)
ExtensionInstanceProperty

ExtensionInstance XAML 연결된 속성을 식별합니다.

연결된 속성

ExtensionInstance

데이터 템플릿의 단계적 렌더링을 위한 도우미 메서드를 정의하는 확장 instance 가져오거나 설정합니다.

메서드

ClearValue(DependencyProperty)

종속성 속성의 로컬 값을 지웁니다.

(다음에서 상속됨 DependencyObject)
GetAnimationBaseValue(DependencyProperty)

애니메이션이 활성화되지 않은 경우에 적용되는 종속성 속성에 대해 설정된 기본 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
GetElement(ElementFactoryGetArgs)

DataTemplate에 선언된 UIElement 개체의 기존 instance 만들거나 검색합니다.

GetExtensionInstance(FrameworkElement)

대상 요소에 대한 DataTemplate.ExtensionInstance XAML 연결된 속성의 값을 가져옵니다.

GetValue(DependencyProperty)

DependencyObject에서 종속성 속성의 현재 유효 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
LoadContent()

DataTemplateUIElement 개체를 만듭니다.

ReadLocalValue(DependencyProperty)

로컬 값이 설정된 경우 종속성 속성의 로컬 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
RecycleElement(ElementFactoryRecycleArgs)

GetElement를 사용하여 이전에 검색한 UIElement를 재활용합니다.

RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

DependencyObject instance 특정 DependencyProperty에 대한 변경 내용을 수신 대기하기 위한 알림 함수를 등록합니다.

(다음에서 상속됨 DependencyObject)
SetExtensionInstance(FrameworkElement, IDataTemplateExtension)

대상 요소에 대한 DataTemplate.ExtensionInstance XAML 연결된 속성의 값을 설정합니다.

SetValue(DependencyProperty, Object)

DependencyObject에 대한 종속성 속성의 로컬 값을 설정합니다.

(다음에서 상속됨 DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

RegisterPropertyChangedCallback을 호출하여 이전에 등록된 변경 알림을 취소합니다.

(다음에서 상속됨 DependencyObject)

적용 대상

추가 정보