DataTemplate Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
- 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 FirstName
proprietà , LastName
e 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à:
- ItemsControl.ItemTemplate (ereditato da vari controlli elementi, ad esempio ListView, GridView, ListBox)
- ContentControl.ContentTemplate (ereditato da vari controlli contenuto, ad esempio Button, Frame, SettingsFlyout)
- Proprietà HeaderTemplate e FooterTemplate di varie classi di controllo elementi
- ItemsPresenter.HeaderTemplate e ItemsPresenter.FooterTemplate
- Proprietà HeaderTemplate e FooterTemplate di controlli di testo, ad esempio RichEditBox, TextBox
- Proprietà HeaderTemplate di controlli come ComboBox, DatePicker, Hub,HubSection, Pivot, Slider, TimePicker, ToggleSwitch; alcuni di questi hanno anche FooterTemplate
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) |