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 ao FirstName, LastNamee Address propriedades. Para obter mais informações sobre a associação de dados, consulte a 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. 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 tivesse necessidade de 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, em seguida, 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ê considerar 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 ao XAML

DataTemplate é a classe de serviço de host para uma propriedade anexada XAML.

Para dar suporte ao acesso do processador XAML às propriedades anexadas e também para expor operações de obtenção e definição equivalentes 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 de identificador como o identificador da 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

Nome Description
DataTemplate()

Inicializa uma nova instância da classe DataTemplate .

Propriedades

Nome Description
Dispatcher

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

(Herdado de DependencyObject)
DispatcherQueue

Obtém o DispatcherQueue que este objeto está associado. Representa DispatcherQueue uma instalação que pode acessar o DependencyObject thread da interface do usuário mesmo se o código for 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

Nome Description
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

Nome Description
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 em 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 um DependencyProperty específico 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