DataTemplate 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
데이터 개체의 표시 구조에 대해 설명합니다. 데이터 값을 표시하는 템플릿의 특정 요소에 데이터 바인딩을 사용합니다.
UWP에 해당하는 WinUI 2 API: Microsoft.UI.Xaml.DataTemplate(Windows 앱 SDK WinUI의 경우 Windows 앱 SDK 네임스페이스 참조).
/// [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>
- 상속
- 특성
- 구현
Windows 요구 사항
| 디바이스 패밀리 |
Windows 10 (10.0.10240.0에서 도입되었습니다.)
|
| API contract |
Windows.Foundation.UniversalApiContract (v1.0에서 도입되었습니다.)
|
예제
다음 예제에서는 DataTemplate을 사용하여 의 ListBox항목을 표시합니다. 이 예제에서는 ListBox 개체 컬렉션 Customer 에 바인딩됩니다. DataTemplate에는 , LastName및 Address 속성에 바인딩하는 컨트롤이 FirstName포함되어 TextBlock 있습니다. 데이터 바인딩에 대한 자세한 내용은 데이터 바인딩을 자세히 참조하세요.
<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 개체는 다음 속성의 값으로 사용됩니다.
- ItemsControl.ItemTemplate(다양한 항목 컨트롤(예: ListView, GridViewListBox)에 의해 상속됩니다.
- ContentControl.ContentTemplate(다양한 콘텐츠 컨트롤(예: Button, FrameSettingsFlyout)에 의해 상속됩니다.
- 다양한 항목 컨트롤 클래스의 HeaderTemplate 및 FooterTemplate 속성
- ItemsPresenter.HeaderTemplate 및 ItemsPresenter.FooterTemplate
- 과 같은 RichEditBox텍스트 컨트롤의 HeaderTemplate 및 FooterTemplate 속성TextBox
- 와 같은 ComboBoxDatePicker컨트롤의 HeaderTemplate 속성 , , HubSectionHub, Pivot, Slider, TimePickerToggleSwitch; 이들 중 일부는 FooterTemplate 도 있습니다.
일반적으로 DataTemplate을 사용하여 데이터의 시각적 표현을 지정합니다. DataTemplate 개체는 전체 컬렉션에 ItemsControl 바인딩 ListBox 할 때 특히 유용합니다. 특정 지침이 ListBox 없으면 컬렉션에 있는 개체의 문자열 표현이 표시됩니다. DataTemplate을 사용하여 각 데이터 개체의 모양을 정의합니다. DataTemplate의 콘텐츠는 데이터 개체의 시각적 구조가 됩니다.
일반적으로 DataTemplate에서 데이터 바인딩을 사용합니다. 예를 들어 a ListBox 가 개체 컬렉션 Customer 에 바인딩되고 속성이 ItemTemplate DataTemplate으로 설정되어 있다고 가정합니다. 만들어지면 컬렉션의 ListBox 각 Customer 컬렉션에 대해 a ListBoxItem 가 만들어지고 DataContext 해당 컬렉션이 ListBoxItem 적절한 고객으로 설정됩니다. 즉, 첫 번째 DataContext 고객은 첫 ListBoxItem 번째 고객으로 설정되고, DataContext 두 번째 ListBoxItem 고객은 두 번째 고객으로 설정됩니다. DataTemplate의 요소를 바인딩하여 각 Customer 개체에서 제공되는 속성 값을 표시할 수 있습니다.
DataTemplate을 사용하여 여러 ContentControl 개체 간에 개체를 공유할 UIElement 수도 있습니다. 예를 들어 동일한 그래픽을 사용하려면 애플리케이션에 여러 단추가 필요하다고 가정합니다. 그래픽이 포함된 DataTemplate을 만들고 단추에 ContentTemplate 사용할 수 있습니다. 데이터 템플릿은 ContentTemplate 데이터 바인딩을 사용할 수도 있습니다. 그러나 이 경우 데이터 컨텍스트는 템플릿이 적용된 요소와 동일합니다. 일반적으로 이것은 하나의 데이터 개체이며 항목의 개념이 없습니다.
DataTemplate을 XAML에서 속성 요소의 ItemTemplate 직접 자식으로 배치할 수 있습니다. 인 라인 템플릿 으로 알고 있으며 UI의 다른 영역에 동일한 데이터 템플릿을 사용할 필요가 없는 경우 이 작업을 수행합니다. DataTemplate을 리소스로 정의한 다음 리소스를 속성 값으로 참조할 ItemTemplate 수도 있습니다. 리소스가 되면 데이터 템플릿이 필요한 여러 UI 요소에 대해 동일한 템플릿을 사용할 수 있습니다. 데이터 템플릿 Application.Resources을 고려하면 UI의 여러 페이지에 대해 동일한 템플릿을 공유할 수도 있습니다.
데이터 템플릿의 콘텐츠에 대한 XAML 사용량은 설정 가능한 코드 속성으로 노출되지 않습니다. DataTemplate에 대한 XAML 처리에 기본 제공되는 특수 동작입니다.
고급 데이터 바인딩 시나리오의 경우 데이터의 속성에 UI 표현을 생성해야 하는 템플릿이 결정되도록 할 수 있습니다. 이 시나리오에서는 데이터 뷰에 DataTemplateSelector 할당하는 등의 ItemTemplateSelector 속성을 사용하고 설정할 수 있습니다. A DataTemplateSelector 는 직접 작성하는 논리 클래스로, 데이터와 상호 작용하는 고유한 논리에 따라 바인딩 엔진에 정확히 하나의 DataTemplate을 반환하는 메서드가 있습니다. 자세한 내용은 데이터 바인딩 심층 분석을 참조하세요.
XAML 연결된 속성
DataTemplate은 XAML 연결된 속성에 대한 호스트 서비스 클래스입니다.
연결된 속성에 대한 XAML 프로세서 액세스를 지원하고 동일한 get 및 set 작업을 코드에 노출하기 위해 각 XAML 연결된 속성에는 Get 및 Set 접근자 메서드 쌍이 있습니다. 코드에서 값을 얻거나 설정하는 또 다른 방법은 종속성 속성 시스템을 사용하여 식별자 필드를 종속성 속성 식별자로 호출 GetValue 하거나 SetValue 전달하는 것입니다.
| 연결된 속성 | Description |
|---|---|
| ExtensionInstance | 데이터 템플릿의 단계적 렌더링을 위한 도우미 메서드를 정의하는 확장 인스턴스를 가져오거나 설정합니다. |
버전 기록
| Windows 버전 | SDK 버전 | 추가된 값 |
|---|---|---|
| 1809 | 17763 | GetElement |
| 1809 | 17763 | RecycleElement |
생성자
| DataTemplate() |
DataTemplate 클래스의 새 인스턴스를 초기화합니다. |
속성
| Dispatcher |
이 개체가 CoreDispatcher 연결된 개체를 가져옵니다. 코드 CoreDispatcher 가 비 UI 스레드에서 시작되는 경우에도 UI 스레드에 액세스할 DependencyObject 수 있는 기능을 나타냅니다. UWP에 해당하는 WinUI 2 API: Microsoft.UI.Xaml.DependencyObject.Dispatcher(Windows 앱 SDK WinUI의 경우 Windows 앱 SDK 네임스페이스 참조). (다음에서 상속됨 DependencyObject) |
| ExtensionInstanceProperty |
ExtensionInstance XAML 연결된 속성을 식별합니다. UWP에 해당하는 WinUI 2 API: Microsoft.UI.Xaml.DataTemplate.ExtensionInstanceProperty(Windows 앱 SDK WinUI의 경우 Windows 앱 SDK 네임스페이스 참조). |
연결된 속성
| ExtensionInstance |
데이터 템플릿의 단계적 렌더링을 위한 도우미 메서드를 정의하는 확장 인스턴스를 가져오거나 설정합니다. |
메서드
적용 대상
추가 정보
피드백
다음에 대한 사용자 의견 제출 및 보기