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 utilizzato un Oggetto DataTemplate per visualizzare gli elementi di un controllo ListView. In questo esempio, ListView è associato a una raccolta di Customer oggetti . DataTemplate contiene controlli TextBlock che si associano alle FirstNameproprietà , LastNamee Address . Per altre informazioni sul data binding, vedi Informazioni approfondite sul data binding.

<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, un controllo ListBox visualizza la rappresentazione di stringa degli oggetti in una raccolta. Usare un Oggetto DataTemplate per definire l'aspetto di ognuno degli oggetti dati. Il contenuto di DataTemplate diventa la struttura visiva degli oggetti dati.

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

È anche possibile usare un Oggetto DataTemplate per condividere oggetti UIElement tra più oggetti ContentControl . Si supponga, ad esempio, che nell'applicazione siano necessari più pulsanti 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 è uguale all'elemento in cui viene applicato il modello. In genere si tratta di un oggetto dati e non esiste alcun concetto di elementi.

Puoi posizionare un Oggetto DataTemplate come elemento figlio diretto di un elemento della proprietà ItemTemplate in XAML. Questo è noto come modello inline ed è necessario farlo 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 si tratta di una risorsa, è possibile usare lo stesso modello per più elementi dell'interfaccia utente che necessitano di un modello di dati. Se si inserisce 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 viene esposto come proprietà del codice impostabile. Si tratta di un comportamento speciale integrato nell'elaborazione XAML per un Oggetto DataTemplate.

Per gli scenari avanzati di data binding, è possibile che si desideri avere proprietà dei dati per determinare quale modello deve produrre le relative rappresentazioni dell'interfaccia utente. Per questo scenario, è possibile usare un DataTemplateSelector e impostare proprietà come ItemTemplateSelector per assegnarlo a una vista dati. DataTemplateSelector è una classe logica che si scrive manualmente, che ha un metodo che restituisce esattamente un DataTemplate al motore di associazione in base alla logica personalizzata che interagisce con i dati. Per altre informazioni, vedere Approfondimento sul Data binding.

Proprietà associate XAML

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

Per supportare l'accesso del processore XAML alle proprietà associate e anche per esporre operazioni 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 di 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

Nome Descrizione
DataTemplate()

Inizializza una nuova istanza della classe DataTemplate .

Proprietà

Nome Descrizione
Dispatcher

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

(Ereditato da DependencyObject)
DispatcherQueue

Ottiene l'oggetto DispatcherQueue a cui è associato questo oggetto. Rappresenta DispatcherQueue una funzionalità che può accedere al nel thread dell'interfaccia DependencyObject utente anche se il codice viene avviato da un thread non dell'interfaccia utente.

(Ereditato da DependencyObject)
ExtensionInstanceProperty

Identifica la proprietà associata XAML ExtensionInstance .

Proprietà associate

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

Metodi

Nome Descrizione
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 dichiarato in DataTemplate.

GetExtensionInstance(FrameworkElement)

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

GetValue(DependencyProperty)

Restituisce il valore effettivo corrente di una proprietà di dipendenza da dependencyObject.

(Ereditato da DependencyObject)
LoadContent()

Crea gli oggetti UIElement in DataTemplate.

ReadLocalValue(DependencyProperty)

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

(Ereditato da DependencyObject)
RecycleElement(ElementFactoryRecycleArgs)

Ricicla un oggetto UIElement recuperato in precedenza tramite GetElement.

RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Registra una funzione di notifica per l'ascolto delle modifiche a una dipendenza specifica in questa istanza dependencyObject .

(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