DataTemplate 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
데이터 개체의 표시 구조에 대해 설명합니다. 데이터 값을 표시하는 템플릿의 특정 요소에 데이터 바인딩을 사용합니다.
/// [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
속성에 바인딩하는 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 개체는 다음 속성의 값으로 사용됩니다.
- ItemsControl.ItemTemplate(ListView, GridView, ListBox와 같은 다양한 항목 컨트롤에서 상속됨)
- ContentControl.ContentTemplate ( Button, Frame, SettingsFlyout과 같은 다양한 콘텐츠 컨트롤에서 상속됨)
- 다양한 항목 컨트롤 클래스의 HeaderTemplate 및 FooterTemplate 속성
- ItemsPresenter.HeaderTemplate 및 ItemsPresenter.FooterTemplate
- RichEditBox, TextBox와 같은 텍스트 컨트롤의 HeaderTemplate 및 FooterTemplate 속성
- ComboBox, DatePicker, Hub, HubSection, Pivot, Slider, TimePicker, ToggleSwitch와 같은 컨트롤의 HeaderTemplate 속성입니다. 이러한 항목 중 일부에는 FooterTemplate도 있습니다.
일반적으로 DataTemplate을 사용하여 데이터의 시각적 표현을 지정합니다. DataTemplate 개체는 ListBox와 같은 ItemsControl을 전체 컬렉션에 바인딩할 때 특히 유용합니다. 특정 지침이 없으면 ListBox 는 컬렉션에 있는 개체의 문자열 표현을 표시합니다. DataTemplate을 사용하여 각 데이터 개체의 모양을 정의합니다. DataTemplate의 콘텐츠는 데이터 개체의 시각적 구조가 됩니다.
일반적으로 DataTemplate에서 데이터 바인딩을 사용합니다. 예를 들어 ListBox 가 개체 컬렉션 Customer
에 바인딩되고 ItemTemplate 속성이 DataTemplate 으로 설정되어 있다고 가정합니다. ListBox를 만들면 컬렉션의 각 Customer
항목에 대해 ListBoxItem이 만들어지고 ListBoxItem의 DataContext가 적절한 고객으로 설정됩니다. 즉, 첫 번째 ListBoxItem의 DataContext는 첫 번째 고객으로 설정되고 두 번째 ListBoxItem의 DataContext는 두 번째 고객으로 설정됩니다. 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 프로세서 액세스를 지원하고 동등한 get 및 set 작업을 코드에 노출하기 위해 연결된 각 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 가져오거나 설정합니다. |