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(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>
- Herencia
- Atributos
- Implementaciones
Requisitos de Windows
Familia de dispositivos |
Windows 10 (se introdujo en la versión 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (se introdujo en la versión v1.0)
|
Ejemplos
En el ejemplo siguiente se usa una clase DataTemplate para mostrar los elementos de un control ListBox. En este ejemplo, listBox 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>
<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
Comentarios
Un objeto DataTemplate 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)
- Propiedades HeaderTemplate y FooterTemplate de varias clases de control de elementos
- ItemsPresenter.HeaderTemplate y ItemsPresenter.FooterTemplate
- Propiedades HeaderTemplate y FooterTemplate de controles de texto como RichEditBox, TextBox
- Propiedad HeaderTemplate de controles como ComboBox, DatePicker, Hub,HubSection, Pivot, Slider, TimePicker, ToggleSwitch; algunos de ellos también tienen FooterTemplate
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 un 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 un ListBox está enlazado a una colección de Customer
objetos y tiene la propiedad ItemTemplate establecida en dataTemplate. Cuando se crea listBox , se crea un listBoxItem para cada Customer
uno de la colección y dataContext del listBoxItem se establece en el cliente adecuado. En otras palabras, dataContext del primer listBoxItem se establece en el primer cliente, dataContext del segundo listBoxItem 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 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 sea 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.
En 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 de obtención y establecimiento equivalentes en 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 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. |
Historial de versiones
Versión de Windows | Versión del SDK | Valor agregado |
---|---|---|
1809 | 17763 | GetElement |
1809 | 17763 | RecycleElement |
Constructores
DataTemplate() |
Inicializa una nueva instancia de la clase DataTemplate . |
Propiedades
Dispatcher |
Obtiene el CoreDispatcher al que está asociado este objeto. CoreDispatcher representa una instalación que puede tener acceso a DependencyObject en el subproceso de interfaz de usuario incluso si un subproceso que no es de interfaz de usuario inicia el código. (Heredado de DependencyObject) |
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 llamando a RegisterPropertyChangedCallback. (Heredado de DependencyObject) |