Partilhar via


DataTemplate Classe

Definição

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
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
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 FirstNamepropriedades , LastNamee 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:

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)

Aplica-se a

Confira também