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(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à
- 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à:
- ItemsControl.ItemTemplate (ereditato da vari controlli elementi, ad esempio ListView, GridView, ListBox)
- ContentControl.ContentTemplate (ereditato da vari controlli contenuto, ad esempio Button, Frame, SettingsFlyout)
-
HeaderTemplateproprietà eFooterTemplatedi varie classi di controllo elementi - ItemsPresenter.HeaderTemplate e ItemsPresenter.FooterTemplate
-
HeaderTemplateproprietà eFooterTemplatedi controlli di testo, ad esempio RichEditBox, TextBox -
HeaderTemplateproprietà di controlli come ComboBox, DatePicker, Hub, HubSection, Pivot, Slider, TimePicker, ToggleSwitch; alcuni di questi hanno ancheFooterTemplate
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 |
| DispatcherQueue |
Ottiene l'oggetto |
| 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) |