Compartilhar 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(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
Herança
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
Atributos
Implementações

Exemplos

O exemplo a seguir usa um DataTemplate para exibir os itens de um ListView. Neste exemplo, o ListView está associado 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>
        <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"));
    }

}

Comentários

Um DataTemplate objeto é usado como o valor para estas 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 um ListView esteja associado a uma coleção de Customer objetos e tenha a propriedade ItemTemplate definida como um DataTemplate. Quando o ListView é criado, um ListViewItem é criado para cada Customer um na coleção e o DataContext do ListViewItem é definido como o cliente apropriado. Em outras palavras, o DataContext do primeiro ListViewItem é definido como o primeiro cliente, o DataContext do segundo ListViewItem é 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.

Construtores

DataTemplate()

Inicializa uma nova instância da classe DataTemplate .

Propriedades

Dispatcher

Sempre retorna null em um aplicativo SDK do Aplicativo Windows. Em vez disso, use DispatcherQueue .

(Herdado de DependencyObject)
DispatcherQueue

Obtém o ao DispatcherQueue qual esse objeto está associado. O DispatcherQueue representa uma instalação que pode acessar o 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