DataTemplate Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Descreve a estrutura visual de um objeto de dados. Use a associação de dados para elementos específicos no modelo que exibem os valores de dados.
/// [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>
- Herança
- Atributos
- Implementações
Requisitos do Windows
Família de dispositivos |
Windows 10 (introduzida na 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (introduzida na v1.0)
|
Exemplos
O exemplo a seguir usa um DataTemplate para exibir os itens de uma ListBox. Neste exemplo, a ListBox está associada a uma coleção de Customer
objetos. O DataTemplate contém controles TextBlock que se associam às FirstName
propriedades , LastName
e Address
. Para obter mais informações sobre a associação de dados, consulte Associação de dados detalhadamente.
<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
Comentários
Um objeto DataTemplate é usado como o valor para essas propriedades:
- ItemsControl.ItemTemplate (que é herdado por vários controles de itens, como ListView, GridView, ListBox)
- ContentControl.ContentTemplate (que é herdado por vários controles de conteúdo, como Button, Frame, SettingsFlyout)
- Propriedades HeaderTemplate e FooterTemplate de várias classes de controle de itens
- ItemsPresenter.HeaderTemplate e ItemsPresenter.FooterTemplate
- Propriedades HeaderTemplate e FooterTemplate de controles de texto como RichEditBox, TextBox
- Propriedade HeaderTemplate de controles como ComboBox, DatePicker, Hub, HubSection, Pivot, Slider, TimePicker, ToggleSwitch; alguns deles também têm FooterTemplate
Normalmente, você usa um DataTemplate para especificar a representação visual de seus dados. Os objetos DataTemplate são particularmente úteis quando você está associando um ItemsControl , como um ListBox , a uma coleção inteira. Sem instruções específicas, um ListBox exibe a representação de cadeia de caracteres dos objetos em uma coleção. Use um DataTemplate para definir a aparência de cada um dos objetos de dados. O conteúdo do DataTemplate torna-se a estrutura visual dos objetos de dados.
Normalmente, você usa a associação de dados em um DataTemplate. Por exemplo, suponha que uma ListBox esteja associada a uma coleção de Customer
objetos e tenha a propriedade ItemTemplate definida como um DataTemplate. Quando a ListBox é criada, um ListBoxItem é criado para cada Customer
um na coleção e o DataContext do ListBoxItem é definido como o cliente apropriado. Em outras palavras, o DataContext do primeiro ListBoxItem é definido como o primeiro cliente, o DataContext do segundo ListBoxItem é definido como o segundo cliente e assim por diante. Você pode associar elementos no DataTemplate para mostrar valores de propriedade provenientes de cada um dos Customer
objetos.
Você também pode usar um DataTemplate para compartilhar objetos UIElement em vários objetos ContentControl . Por exemplo, suponha que você precise de vários botões em seu aplicativo para ter o mesmo gráfico. Você pode criar um DataTemplate que contém o gráfico e usá-lo como ContentTemplate para os botões. Um modelo de dados para ContentTemplate também pode usar a associação de dados. Mas, nesse caso, o contexto de dados é o mesmo que o elemento em que o modelo é aplicado. Normalmente, esse é um objeto de dados e não há nenhum conceito de itens.
Você pode colocar um DataTemplate como o filho direto de um elemento de propriedade ItemTemplate em XAML. Isso é conhecido como um modelo embutido e você faria isso se não precisasse usar esse mesmo modelo de dados para outras áreas da interface do usuário. Você também pode definir um DataTemplate como um recurso e referenciar o recurso como o valor da propriedade ItemTemplate . Depois de ser um recurso, você pode usar o mesmo modelo para vários elementos de interface do usuário que precisam de um modelo de dados. Se você fatorar o modelo de dados em Application.Resources, poderá até mesmo compartilhar o mesmo modelo para páginas diferentes da interface do usuário.
O uso de XAML para conteúdo de um modelo de dados não é exposto como uma propriedade de código configurável. É um comportamento especial integrado ao processamento XAML para um DataTemplate.
Para cenários avançados de associação de dados, talvez você queira que as propriedades dos dados determinem qual modelo deve produzir suas representações de interface do usuário. Para esse cenário, você pode usar um DataTemplateSelector e definir propriedades como ItemTemplateSelector para atribuí-lo a uma exibição de dados. Um DataTemplateSelector é uma classe lógica que você mesmo escreve, que tem um método que retorna exatamente um DataTemplate para o mecanismo de associação com base em sua própria lógica interagindo com seus dados. Para obter mais informações, consulte Vinculação de dados em detalhes.
Propriedades anexadas XAML
DataTemplate é a classe de serviço host de uma propriedade anexada XAML.
Para dar suporte ao acesso do processador XAML às propriedades anexadas e também para expor operações equivalentes get e set ao código, cada propriedade anexada XAML tem um par de métodos de acessador Get e Set. Outra maneira de obter ou definir o valor no código é usar o sistema de propriedades de dependência, chamando GetValue ou SetValue e passando o campo identificador como o identificador de propriedade de dependência.
Propriedade anexada | Descrição |
---|---|
ExtensionInstance | Obtém ou define uma instância de extensão que define métodos auxiliares para renderização em fases de um modelo de dados. |
Histórico de versão
Versão do Windows | Versão do SDK | Valor adicionado |
---|---|---|
1809 | 17763 | GetElement |
1809 | 17763 | RecycleElement |
Construtores
DataTemplate() |
Inicializa uma nova instância da classe DataTemplate . |
Propriedades
Dispatcher |
Obtém o CoreDispatcher ao qual esse objeto está associado. O CoreDispatcher representa uma instalação que pode acessar DependencyObject no thread da interface do usuário mesmo que o código seja iniciado por um thread que não seja da interface do usuário. (Herdado de DependencyObject) |
ExtensionInstanceProperty |
Identifica a propriedade anexada ExtensionInstance XAML. |
Propriedades Anexadas
ExtensionInstance |
Obtém ou define uma instância de extensão que define métodos auxiliares para renderização em fases de um modelo de dados. |
Métodos
ClearValue(DependencyProperty) |
Limpa o valor local de uma propriedade de dependência. (Herdado de DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
Retorna qualquer valor base estabelecido para uma propriedade de dependência, que se aplicaria nos casos em que uma animação não está ativa. (Herdado de DependencyObject) |
GetElement(ElementFactoryGetArgs) |
Cria ou recupera uma instância existente do objeto UIElement declarado no DataTemplate. |
GetExtensionInstance(FrameworkElement) |
Obtém o valor da propriedade anexada DataTemplate.ExtensionInstance XAML para o elemento de destino. |
GetValue(DependencyProperty) |
Retorna o valor efetivo atual de uma propriedade de dependência de um DependencyObject. (Herdado de DependencyObject) |
LoadContent() |
Cria os objetos UIElement no DataTemplate. |
ReadLocalValue(DependencyProperty) |
Retorna o valor local de uma propriedade de dependência, se um valor local for definido. (Herdado de DependencyObject) |
RecycleElement(ElementFactoryRecycleArgs) |
Recicla um UIElement que foi recuperado anteriormente usando GetElement. |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Registra uma função de notificação para escutar alterações em uma DependencyProperty específica nesta instância dependencyObject . (Herdado de DependencyObject) |
SetExtensionInstance(FrameworkElement, IDataTemplateExtension) |
Define o valor da propriedade anexada DataTemplate.ExtensionInstance XAML para um elemento de destino. |
SetValue(DependencyProperty, Object) |
Define o valor local de uma propriedade de dependência em um DependencyObject. (Herdado de DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Cancela uma notificação de alteração que foi registrada anteriormente chamando RegisterPropertyChangedCallback. (Herdado de DependencyObject) |