Condividi tramite


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(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 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
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
<DataTemplate ...>
  templateContent
</DataTemplate>
 

Ereditarietà
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
Attributi
Implementazioni

Requisiti Windows

Famiglia di dispositivi
Windows 10 (è stato introdotto in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)

Esempio

Nell'esempio seguente viene utilizzato un oggetto DataTemplate per visualizzare gli elementi di un controllo ListBox. In questo esempio, ListBox è associato a una raccolta di Customer oggetti . DataTemplate contiene controlli TextBlock associati alle FirstNameproprietà , LastNamee Address . Per altre informazioni sul data binding, vedi Informazioni approfondite sul data binding.

<Grid>
    <Grid.Resources>
        <src:Customers x:Key="customers"/>
    </Grid.Resources>

    <ListBox ItemsSource="{StaticResource customers}" Width="350" Margin="0,5,0,10">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Padding="5,0,5,0"
          Text="{Binding FirstName}" />
                    <TextBlock Text="{Binding LastName}" />
                    <TextBlock Text=", " />
                    <TextBlock Text="{Binding Address}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</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"));
    }

}
Public Class Customer
    Private _firstName As String
    Private _lastName As String
    Private _address As String

    Public Property FirstName() As String
        Get
            Return _firstName
        End Get

        Set(ByVal value As String)
            _firstName = value
        End Set
    End Property

    Public Property LastName() As String
        Get
            Return _lastName
        End Get

        Set(ByVal value As String)
            _lastName = value
        End Set
    End Property

    Public Property Address() As String
        Get
            Return _address
        End Get

        Set(ByVal value As String)
            _address = value
        End Set
    End Property

    Public Sub New(ByVal firstName As String, ByVal lastName As String, ByVal address As String)
        Me.FirstName = firstName
        Me.LastName = lastName
        Me.Address = address
    End Sub

End Class

Public Class Customers
    Inherits ObservableCollection(Of Customer)

    Public Sub New()
        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"))
    End Sub

End Class

Commenti

Un oggetto DataTemplate 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 un controllo 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 ListBox sia associato a un insieme di Customer oggetti e che la proprietà ItemTemplate sia impostata su un oggetto DataTemplate. Quando viene creato listBox , viene creato un oggetto ListBoxItem per ogni Customer oggetto della raccolta e il datacontextdell'oggetto ListBoxItem viene impostato sul cliente appropriato. In altre parole, il DataContext del primo listBoxItem è impostato sul primo cliente, il DataContext del secondo listBoxItem 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 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 corrisponde all'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 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 factori 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 di data binding avanzati, potrebbe essere necessario avere proprietà dei dati per determinare quale modello deve produrre le relative rappresentazioni dell'interfaccia utente. Per questo scenario, è possibile usare un Oggetto DataTemplateSelector e impostare proprietà come ItemTemplateSelector per assegnarlo a una visualizzazione dati. DataTemplateSelector è una classe logica scritta dall'utente, che dispone di un metodo che restituisce esattamente un Oggetto DataTemplate al motore di associazione in base alla logica personalizzata che interagisce con i dati. Per altre info, vedi Informazioni approfondite 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 della funzione 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 dell'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.

Cronologia delle versioni

Versione di Windows Versione dell'SDK Valore aggiunto
1809 17763 GetElement
1809 17763 RecycleElement

Costruttori

DataTemplate()

Inizializza una nuova istanza della classe DataTemplate .

Proprietà

Dispatcher

Ottiene coreDispatcher a cui è associato questo oggetto. CoreDispatcher rappresenta una funzionalità che può accedere a DependencyObject nel thread dell'interfaccia 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

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 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 usando GetElement.

RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Registra una funzione di notifica per l'ascolto delle modifiche apportate a una dipendenza specifica in questa istanza di 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 su 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