Partager via


DataTemplate Classe

Définition

Décrit la structure visuelle d'un objet de données. Utilisez la liaison de données pour des éléments spécifiques dans le modèle qui affichent les valeurs de données.

/// [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
Héritage
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
Attributs
Implémente

Exemples

L’exemple suivant utilise un DataTemplate pour afficher les éléments d’un Contrôle ListView. Dans cet exemple, listView est lié à une collection d’objets Customer . DataTemplate contient des contrôles TextBlock qui se lient aux FirstNamepropriétés , LastNameet Address . Pour plus d’informations sur la liaison de données, consultez Liaison de données en détail.

<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"));
    }

}

Remarques

Un DataTemplate objet est utilisé comme valeur pour ces propriétés :

Vous utilisez généralement un DataTemplate pour spécifier la représentation visuelle de vos données. Les objets DataTemplate sont particulièrement utiles lorsque vous liez un ItemsControl tel qu’un Objet ListBox à une collection entière. Sans instructions spécifiques, un Objet ListBox affiche la représentation sous forme de chaîne des objets d’une collection. Utilisez un DataTemplate pour définir l’apparence de chacun de vos objets de données. Le contenu de votre DataTemplate devient la structure visuelle de vos objets de données.

Vous utilisez généralement la liaison de données dans un DataTemplate. Par exemple, supposons qu’un Contrôle ListView soit lié à une collection d’objets Customer et que la propriété ItemTemplate soit définie sur un DataTemplate. Lors de la création de ListView , un objet ListViewItem est créé pour chaque Customer élément de la collection, et le DataContext de l’objet ListViewItem est défini sur le client approprié. En d’autres termes, le DataContext du premier ListViewItem est défini sur le premier client, le DataContext du deuxième ListViewItem est défini sur le deuxième client, et ainsi de suite. Vous pouvez lier des éléments dans le DataTemplate pour afficher les valeurs de propriété qui proviennent de chacun des Customer objets.

Vous pouvez également utiliser un DataTemplate pour partager des objets UIElement entre plusieurs objets ContentControl . Par exemple, supposons que vous avez besoin de plusieurs boutons sur votre application pour avoir le même graphique. Vous pouvez créer un DataTemplate qui contient le graphique et l’utiliser comme ContentTemplate pour les boutons. Un modèle de données pour ContentTemplate peut également utiliser la liaison de données. Mais dans ce cas, le contexte de données est identique à l’élément où le modèle est appliqué. Il s’agit généralement d’un objet de données et il n’existe aucun concept d’éléments.

Vous pouvez placer un DataTemplate en tant qu’enfant direct d’un élément de propriété ItemTemplate en XAML. Il s’agit d’un modèle inline et vous le ferez si vous n’avez pas besoin d’utiliser ce même modèle de données pour d’autres zones de votre interface utilisateur. Vous pouvez également définir un DataTemplate en tant que ressource, puis référencer la ressource en tant que valeur de la propriété ItemTemplate . Une fois qu’il s’agit d’une ressource, vous pouvez utiliser le même modèle pour plusieurs éléments d’interface utilisateur qui ont besoin d’un modèle de données. Si vous factoriser le modèle de données dans Application.Resources, vous pouvez même partager le même modèle pour différentes pages de votre interface utilisateur.

L’utilisation XAML pour le contenu d’un modèle de données n’est pas exposée en tant que propriété de code settable. Il s’agit d’un comportement spécial intégré au traitement XAML d’un DataTemplate.

Pour les scénarios de liaison de données avancés, vous souhaiterez peut-être que les propriétés des données déterminent quel modèle doit produire leurs représentations d’interface utilisateur. Pour ce scénario, vous pouvez utiliser un DataTemplateSelector et définir des propriétés telles que ItemTemplateSelector pour l’affecter à une vue de données. Un DataTemplateSelector est une classe logique que vous écrivez vous-même, qui a une méthode qui retourne exactement un DataTemplate au moteur de liaison en fonction de votre propre logique interagissant avec vos données. Pour plus d’informations, voir Présentation détaillée de la liaison de données.

Propriétés jointes XAML

DataTemplate est la classe de service hôte pour une propriété jointe XAML.

Pour prendre en charge l’accès du processeur XAML aux propriétés jointes, ainsi que pour exposer des opérations get et set équivalentes au code, chaque propriété jointe XAML possède une paire de méthodes d’accesseur Get et Set. Une autre façon d’obtenir ou de définir la valeur dans le code consiste à utiliser le système de propriétés de dépendance, en appelant GetValue ou SetValue et en passant le champ identificateur comme identificateur de propriété de dépendance.

Propriété jointe Description
ExtensionInstance Obtient ou définit une extension instance qui définit des méthodes d’assistance pour le rendu par phases d’un modèle de données.

Constructeurs

DataTemplate()

Initialise une nouvelle instance de la classe DataTemplate.

Propriétés

Dispatcher

Retourne null toujours dans une application SDK d'application Windows. Utilisez DispatcherQueue à la place.

(Hérité de DependencyObject)
DispatcherQueue

Obtient le DispatcherQueue auquel cet objet est associé. DispatcherQueue représente une installation qui peut accéder au DependencyObject sur le thread d’interface utilisateur, même si le code est initié par un thread autre que l’interface utilisateur.

(Hérité de DependencyObject)
ExtensionInstanceProperty

Identifie la propriété jointe XAML ExtensionInstance .

Propriétés attachées

ExtensionInstance

Obtient ou définit une extension instance qui définit des méthodes d’assistance pour le rendu par phases d’un modèle de données.

Méthodes

ClearValue(DependencyProperty)

Efface la valeur locale d’une propriété de dépendance.

(Hérité de DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Retourne toute valeur de base établie pour une propriété de dépendance, qui s’applique dans les cas où une animation n’est pas active.

(Hérité de DependencyObject)
GetElement(ElementFactoryGetArgs)

Crée ou récupère un instance existant de l’objet UIElement déclaré dans le DataTemplate.

GetExtensionInstance(FrameworkElement)

Obtient la valeur de la propriété jointe XAML DataTemplate.ExtensionInstance pour l’élément cible.

GetValue(DependencyProperty)

Retourne la valeur effective actuelle d’une propriété de dépendance à partir d’un objet DependencyObject.

(Hérité de DependencyObject)
LoadContent()

Crée les objets UIElement dans dataTemplate.

ReadLocalValue(DependencyProperty)

Retourne la valeur locale d’une propriété de dépendance, si une valeur locale est définie.

(Hérité de DependencyObject)
RecycleElement(ElementFactoryRecycleArgs)

Recycle un élément UIElement précédemment récupéré à l’aide de GetElement.

RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Inscrit une fonction de notification pour écouter les modifications apportées à un DependencyProperty spécifique sur ce instance DependencyObject.

(Hérité de DependencyObject)
SetExtensionInstance(FrameworkElement, IDataTemplateExtension)

Définit la valeur de la propriété jointe XAML DataTemplate.ExtensionInstance pour un élément cible.

SetValue(DependencyProperty, Object)

Définit la valeur locale d’une propriété de dépendance sur un DependencyObject.

(Hérité de DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Annule une notification de modification précédemment inscrite en appelant RegisterPropertyChangedCallback.

(Hérité de DependencyObject)

S’applique à

Voir aussi