DataTemplate Classe

Definizione

Descrive la struttura visiva di un oggetto dati. Usare il data binding per elementi specifici nel modello che visualizzano i valori dei dati.

/// [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
Ereditarietà
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
Attributi
Implementazioni

Esempio

Nell'esempio seguente viene usato un oggetto DataTemplate per visualizzare gli elementi di un oggetto ListView. In questo esempio, ListView è associato a una raccolta di Customer oggetti. DataTemplate contiene controlli TextBlock associati alle FirstNameproprietà , LastNamee Address . Per altre informazioni sul data binding, vedere Data binding in profondità.

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

}

Commenti

Un DataTemplate oggetto viene usato come valore per queste proprietà:

In genere si usa un oggetto DataTemplate per specificare la rappresentazione visiva dei dati. Gli oggetti DataTemplate sono particolarmente utili quando si associa un oggetto ItemsControl , ad esempio ListBox a un'intera raccolta. Senza istruzioni specifiche, listBox visualizza la rappresentazione stringa degli oggetti in una raccolta. Usare un oggetto DataTemplate per definire l'aspetto di ognuno degli oggetti dati. Il contenuto dell'oggetto DataTemplate diventa la struttura visiva degli oggetti dati.

In genere si usa data binding in un DataTemplate. Si supponga, ad esempio, che un oggetto ListView sia associato a una raccolta di Customer oggetti e abbia la proprietà ItemTemplate impostata su un oggetto DataTemplate . Quando viene creato ListView, viene creato un oggetto ListViewItem per ogni Customer raccolta e dataContext dell'oggetto ListViewItem viene impostato sul cliente appropriato. In altre parole, il DataContext del primo ListViewItem è impostato sul primo cliente, il DataContext del secondo ListViewItem viene impostato sul secondo cliente e così via. È possibile associare gli elementi in DataTemplate per visualizzare i valori delle proprietà provenienti da ognuno degli Customer oggetti.

È anche possibile usare un oggetto DataTemplate per condividere gli oggetti UIElement in più oggetti ContentControl . Si supponga, ad esempio, di avere più pulsanti nell'applicazione per avere lo stesso elemento grafico. È possibile creare un oggetto DataTemplate contenente l'elemento grafico e usarlo come ContentTemplate per i pulsanti. Un modello di dati per ContentTemplate può anche usare il data binding. In questo caso, tuttavia, il contesto dei dati è lo stesso dell'elemento in cui viene applicato il modello. In genere si tratta di un oggetto dati e non esiste alcun concetto di elementi.

È possibile inserire un oggetto DataTemplate come figlio diretto di un elemento della proprietà ItemTemplate in XAML. Questo è noto come modello inline e si farebbe questa operazione se non è necessario usare lo stesso modello di dati per altre aree dell'interfaccia utente. È anche possibile definire un oggetto DataTemplate come risorsa e quindi fare riferimento alla risorsa come valore della proprietà ItemTemplate . Una volta che è una risorsa, è possibile usare lo stesso modello per più elementi dell'interfaccia utente che necessitano di un modello di dati. Se si fattore il modello di dati in Application.Resources, è anche possibile condividere lo stesso modello per pagine diverse dell'interfaccia utente.

L'utilizzo XAML per il contenuto di un modello di dati non è esposto come proprietà del codice settable. Si tratta di un comportamento speciale integrato nell'elaborazione XAML per un DataTemplate.

Per gli scenari di data binding avanzati, è possibile che siano presenti proprietà dei dati che determinano quale modello deve produrre le relative rappresentazioni dell'interfaccia utente. Per questo scenario, è possibile usare una proprietà DataTemplateSelector e impostare proprietà come ItemTemplateSelector per assegnarla a una vista dati. Un DataTemplateSelector è una classe logica che si scrive autonomamente, con un metodo che restituisce esattamente un DataTemplate al motore di associazione in base alla propria logica che interagisce con i dati. Per altre info, vedi Informazioni approfondite sul data binding.

Proprietà associate XAML

DataTemplate è la classe di servizio host per una proprietà associata XAML.

Per supportare l'accesso al processore XAML alle proprietà associate e anche per esporre operazioni di get e set equivalenti al codice, ogni proprietà associata XAML ha una coppia di metodi di accesso Get e Set. Un altro modo per ottenere o impostare il valore nel codice consiste nell'usare il sistema delle proprietà di dipendenza, chiamando GetValue o SetValue e passando il campo identificatore come identificatore della proprietà di dipendenza.

Proprietà associata Descrizione
ExtensionInstance Ottiene o imposta un'istanza di estensione che definisce i metodi helper per il rendering in più fasi di un modello di dati.

Costruttori

DataTemplate()

Inizializza una nuova istanza della classe DataTemplate .

Proprietà

Dispatcher

Restituisce null sempre in un'app SDK per app di Windows. Usare invece DispatcherQueue .

(Ereditato da DependencyObject)
DispatcherQueue

Ottiene l'oggetto DispatcherQueue associato. Rappresenta DispatcherQueue una struttura che può accedere al thread dell'interfaccia utente anche se il codice viene avviato da un thread non dell'interfaccia DependencyObject utente.

(Ereditato da DependencyObject)
ExtensionInstanceProperty

Identifica la proprietà associata XAML ExtensionInstance .

Proprietà associate

ExtensionInstance

Ottiene o imposta un'istanza di estensione che definisce i metodi helper per il rendering in più fasi di un modello di dati.

Metodi

ClearValue(DependencyProperty)

Cancella il valore locale di una proprietà di dipendenza.

(Ereditato da DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Restituisce qualsiasi valore di base stabilito per una proprietà di dipendenza, che si applica nei casi in cui un'animazione non è attiva.

(Ereditato da DependencyObject)
GetElement(ElementFactoryGetArgs)

Crea o recupera un'istanza esistente dell'oggetto UIElement dichiarata in DataTemplate.

GetExtensionInstance(FrameworkElement)

Ottiene il valore della proprietà associata DataTemplate.ExtensionInstance XAML per l'elemento di destinazione.

GetValue(DependencyProperty)

Restituisce il valore effettivo corrente di una proprietà di dipendenza da un oggetto DependencyObject.

(Ereditato da DependencyObject)
LoadContent()

Crea gli oggetti UIElement in DataTemplate.

ReadLocalValue(DependencyProperty)

Restituisce il valore locale di una proprietà di dipendenza, se viene impostato un valore locale.

(Ereditato da DependencyObject)
RecycleElement(ElementFactoryRecycleArgs)

Ricicla un UIElement recuperato in precedenza usando GetElement.

RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Registra una funzione di notifica per l'ascolto delle modifiche a un'istanza di DependencyObject specifica.

(Ereditato da DependencyObject)
SetExtensionInstance(FrameworkElement, IDataTemplateExtension)

Imposta il valore della proprietà associata XAML DataTemplate.ExtensionInstance per un elemento di destinazione.

SetValue(DependencyProperty, Object)

Imposta il valore locale di una proprietà di dipendenza in un oggetto DependencyObject.

(Ereditato da DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Annulla una notifica di modifica registrata in precedenza chiamando RegisterPropertyChangedCallback.

(Ereditato da DependencyObject)

Si applica a

Vedi anche