다음을 통해 공유


DataTemplate 클래스

정의

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

/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 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(Microsoft.UI.Xaml.WinUIContract), 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
Implements IElementFactory
상속
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
특성
구현

예제

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

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

    <ListView ItemsSource="{StaticResource customers}" 
       Width="350" Margin="0,4,0,8">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="local:Customer">
                <StackPanel>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{x:Bind LastName}"/>
                        <TextBlock Text="," Margin="0,0,2,0"/>
                        <TextBlock Text="{x:Bind FirstName}"/>
                    </StackPanel>
                    <TextBlock Text="{x:Bind Address}" Margin="8,0,0,2"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</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"));
    }

}

설명

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

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

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

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

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

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

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

XAML 연결 속성

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

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

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

생성자

DataTemplate()

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

속성

Dispatcher

항상 Windows 앱 SDK 앱에서 를 반환 null 합니다. 대신 DispatcherQueue 를 사용합니다.

(다음에서 상속됨 DependencyObject)
DispatcherQueue

DispatcherQueue 이 개체가 연결된 을 가져옵니다. 는 DispatcherQueue 코드가 비 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)

적용 대상

추가 정보