Compartir a través de


DataTemplate Clase

Definición

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
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
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 FirstNamepropiedades , LastNamey 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:

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)

Se aplica a

Consulte también