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 ListView. Dans cet exemple, listView est lié à une collection d’objets Customer . DataTemplate contient des contrôles TextBlock qui sont liés aux propriétés et Address aux FirstNameLastNamepropriétés. Pour plus d’informations sur la liaison de données, consultez La liaison de données en profondeur.

<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 Objet ItemsControl tel qu’un ListBox à une collection entière. Sans instructions spécifiques, un 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 ListView soit lié à une collection d’objets Customer et que la propriété ItemTemplate a la valeur DataTemplate. Lorsque ListView est créé, un 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 second ListViewItem est défini sur le deuxième client, et ainsi de suite. Vous pouvez lier des éléments dans DataTemplate pour afficher les valeurs de propriété provenant de chacun des Customer objets.

Vous pouvez également utiliser un DataTemplate pour partager des objets UIElement sur 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. Toutefois, dans ce cas, le contexte de données est identique à l’élément où le modèle est appliqué. En général, il s’agit d’un objet de données, et il n’existe aucun concept d’éléments.

Vous pouvez placer un DataTemplate comme 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’aviez pas besoin d’utiliser ce même modèle de données pour d’autres domaines de votre interface utilisateur. Vous pouvez également définir un DataTemplate en tant que ressource, puis référencer la ressource comme 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 factorisez 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 du 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 pour un DataTemplate.

Pour les scénarios de liaison de données avancés, vous souhaiterez peut-être avoir des propriétés des données pour déterminer 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 qui interagit 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 au processeur XAML aux propriétés jointes, ainsi que pour exposer des opérations d’obtention et de définition équivalentes au code, chaque propriété jointe XAML a 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 d’identificateur comme identificateur de propriété de dépendance.

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

Constructeurs

Nom Description
DataTemplate()

Initialise une nouvelle instance de la classe DataTemplate .

Propriétés

Nom Description
Dispatcher

Retourne null toujours dans une application du Kit de développement logiciel (SDK) d’application Windows. Utilisez DispatcherQueue à la place.

(Hérité de DependencyObject)
DispatcherQueue

Obtient le DispatcherQueue résultat auquel cet objet est associé. Représente DispatcherQueue une installation qui peut accéder au DependencyObject thread d’interface utilisateur même si le code est initié par un thread non-interface utilisateur.

(Hérité de DependencyObject)
ExtensionInstanceProperty

Identifie la propriété jointe XAML ExtensionInstance .

Propriétés attachées

Nom Description
ExtensionInstance

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

Méthodes

Nom Description
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 une instance existante de l’objet UIElement déclaré dans DataTemplate.

GetExtensionInstance(FrameworkElement)

Obtient la valeur de la propriété 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 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 UIElement qui a été récupéré précédemment à l’aide de GetElement.

RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Inscrit une fonction de notification pour écouter les modifications apportées à une dependencyProperty spécifique sur cette 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 qui a été précédemment inscrite en appelant RegisterPropertyChangedCallback.

(Hérité de DependencyObject)

S’applique à

Voir aussi