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 se enlaza a una colección de Customer
objetos . DataTemplate contiene controles TextBlock que se enlazan a las FirstName
propiedades , LastName
y 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 (heredado por varios controles de contenido, como Button, Frame, SettingsFlyout)
-
HeaderTemplate
yFooterTemplate
propiedades de varias clases de control de elementos - ItemsPresenter.HeaderTemplate y ItemsPresenter.FooterTemplate
-
HeaderTemplate
yFooterTemplate
propiedades de controles de texto como RichEditBox, TextBox -
HeaderTemplate
propiedad 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 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 una clase 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 una listView está enlazada 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 de la clase 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 que 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 la 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.
En escenarios avanzados de enlace de datos, es posible que desee que las propiedades de los datos determinen 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 de obtención y establecimiento equivalentes en el 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
DataTemplate() |
Inicializa una nueva instancia de la clase DataTemplate . |
Propiedades
Dispatcher |
Siempre devuelve |
DispatcherQueue |
Obtiene el objeto |
ExtensionInstanceProperty |
Identifica la propiedad adjunta XAML ExtensionInstance . |
Propiedades adjuntas
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
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 mediante una llamada a RegisterPropertyChangedCallback. (Heredado de DependencyObject) |