DataTemplate Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Describe la estructura visual de un objeto de datos. Use el enlace de datos para elementos específicos de la plantilla que muestran los valores de datos.
/// [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
- Herencia
- Atributos
- Implementaciones
Ejemplos
En el ejemplo siguiente se usa una clase DataTemplate para mostrar los elementos de un control ListView. En este ejemplo, listView está enlazado a una colección de Customer objetos . DataTemplate contiene controles TextBlock que se enlazan a las FirstNamepropiedades , LastNamey Address . Para obtener más información sobre el enlace de datos, consulte Enlace de datos en profundidad.
<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"));
}
}
Comentarios
Un DataTemplate objeto se usa como valor para estas propiedades:
- ItemsControl.ItemTemplate (heredado por varios controles de elementos como ListView, GridView, ListBox)
- ContentControl.ContentTemplate (que hereda de varios controles de contenido como Button, Frame, SettingsFlyout)
-
HeaderTemplateyFooterTemplatepropiedades de varias clases de control de elementos - ItemsPresenter.HeaderTemplate y ItemsPresenter.FooterTemplate
-
HeaderTemplateyFooterTemplatepropiedades de controles de texto como RichEditBox, TextBox -
HeaderTemplatepropiedad de controles como ComboBox, DatePicker, Hub, HubSection, Pivot, Slider, TimePicker, ToggleSwitch; algunos de ellos también tienenFooterTemplate
Normalmente, se usa una clase DataTemplate para especificar la representación visual de los datos. Los objetos DataTemplate son especialmente útiles cuando se enlaza un control ItemsControl como listBox a toda una colección. Sin instrucciones específicas, un ListBox muestra la representación de cadena de los objetos de una colección. Use dataTemplate para definir la apariencia de cada uno de los objetos de datos. El contenido de dataTemplate se convierte en la estructura visual de los objetos de datos.
Normalmente, se usa el enlace de datos en una clase DataTemplate. Por ejemplo, supongamos que un control ListView está enlazado a una colección de Customer objetos y tiene la propiedad ItemTemplate establecida en una clase DataTemplate. Cuando se crea listView , se crea un objeto ListViewItem para cada Customer uno de la colección y dataContext del listViewItem se establece en el cliente adecuado. En otras palabras, dataContext del primer listViewItem se establece en el primer cliente, dataContext del segundo listViewItem se establece en el segundo cliente, etc. Puede enlazar elementos en DataTemplate para mostrar los valores de propiedad que proceden de cada uno de los Customer objetos.
También puede usar una clase DataTemplate para compartir objetos UIElement entre varios objetos ContentControl . Por ejemplo, supongamos que necesita varios botones en la aplicación para tener el mismo gráfico. Puede crear una clase DataTemplate que contenga el gráfico y usarla como ContentTemplate para los botones. Una plantilla de datos para ContentTemplate también puede usar el enlace de datos. Pero en este caso el contexto de datos es el mismo que el elemento en el que se aplicó la plantilla. Normalmente, se trata de un objeto de datos y no hay ningún concepto de elementos.
Puedes colocar una clase DataTemplate como elemento secundario directo de un elemento de propiedad ItemTemplate en XAML. Esto se conoce como una plantilla insertada y lo haría si no tuviera necesidad de usar esa misma plantilla de datos para otras áreas de la interfaz de usuario. También puede definir una clase DataTemplate como un recurso y, a continuación, hacer referencia al recurso como el valor de la propiedad ItemTemplate . Una vez que se trata de un recurso, puede usar la misma plantilla para varios elementos de interfaz de usuario que necesitan una plantilla de datos. Si factorice la plantilla de datos en Application.Resources, incluso puede compartir la misma plantilla para páginas diferentes de la interfaz de usuario.
El uso de XAML para el contenido de una plantilla de datos no se expone como una propiedad de código que se puede establecer. Es un comportamiento especial integrado en el procesamiento XAML de una clase DataTemplate.
Para escenarios de enlace de datos avanzados, es posible que desee tener propiedades de los datos para determinar qué plantilla debe generar sus representaciones de interfaz de usuario. En este escenario, puede usar un DataTemplateSelector y establecer propiedades como ItemTemplateSelector para asignarla a una vista de datos. DataTemplateSelector es una clase lógica que se escribe usted mismo, que tiene un método que devuelve exactamente un DataTemplate al motor de enlace basado en su propia lógica que interactúa con los datos. Para obtener más información, consulta el tema Enlace de datos en profundidad.
Propiedades adjuntas xaml
DataTemplate es la clase de servicio host para una propiedad adjunta XAML.
Para admitir el acceso del procesador XAML a las propiedades adjuntas y también para exponer operaciones equivalentes de obtención y establecimiento del código, cada propiedad adjunta XAML tiene un par de métodos de descriptor de acceso Get y Set. Otra manera de obtener o establecer el valor en el código es usar el sistema de propiedades de dependencia, llamar a GetValue o SetValue y pasar el campo de identificador como identificador de propiedad de dependencia.
| Propiedad adjunta | Descripción |
|---|---|
| ExtensionInstance | Obtiene o establece una instancia de extensión que define métodos auxiliares para la representación por fases de una plantilla de datos.
|
Constructores
| Nombre | Description |
|---|---|
| DataTemplate() |
Inicializa una nueva instancia de la clase DataTemplate . |
Propiedades
| Nombre | Description |
|---|---|
| Dispatcher |
Siempre devuelve |
| DispatcherQueue |
Obtiene el objeto |
| ExtensionInstanceProperty |
Identifica la propiedad adjunta XAML ExtensionInstance . |
Propiedades adjuntas
| Nombre | Description |
|---|---|
| ExtensionInstance |
Obtiene o establece una instancia de extensión que define métodos auxiliares para la representación por fases de una plantilla de datos. |
Métodos
| Nombre | Description |
|---|---|
| ClearValue(DependencyProperty) |
Borra el valor local de una propiedad de dependencia. (Heredado de DependencyObject) |
| GetAnimationBaseValue(DependencyProperty) |
Devuelve cualquier valor base establecido para una propiedad de dependencia, que se aplicaría en los casos en los que una animación no está activa. (Heredado de DependencyObject) |
| GetElement(ElementFactoryGetArgs) |
Crea o recupera una instancia existente del objeto UIElement declarado en DataTemplate. |
| GetExtensionInstance(FrameworkElement) |
Obtiene el valor de la propiedad adjunta XAML DataTemplate.ExtensionInstance para el elemento de destino. |
| GetValue(DependencyProperty) |
Devuelve el valor efectivo actual de una propiedad de dependencia de dependencyObject. (Heredado de DependencyObject) |
| LoadContent() |
Crea los objetos UIElement en DataTemplate. |
| ReadLocalValue(DependencyProperty) |
Devuelve el valor local de una propiedad de dependencia, si se establece un valor local. (Heredado de DependencyObject) |
| RecycleElement(ElementFactoryRecycleArgs) |
Recicla un UIElement que se recuperó anteriormente mediante GetElement. |
| RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Registra una función de notificación para escuchar los cambios en una dependencyProperty específica en esta instancia de DependencyObject . (Heredado de DependencyObject) |
| SetExtensionInstance(FrameworkElement, IDataTemplateExtension) |
Establece el valor de la propiedad adjunta XAML DataTemplate.ExtensionInstance para un elemento de destino. |
| SetValue(DependencyProperty, Object) |
Establece el valor local de una propiedad de dependencia en dependencyObject. (Heredado de DependencyObject) |
| UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Cancela una notificación de cambio registrada anteriormente llamando a RegisterPropertyChangedCallback. (Heredado de DependencyObject) |