Información general sobre orígenes de enlaces

Actualización: noviembre 2007

En el enlace de datos, el objeto de origen de enlace (origen) hace referencia al objeto del que se obtienen los datos. En este tema se describen los tipos de objetos que pueden utilizarse como origen.

Este tema contiene las secciones siguientes.

  • Origen de un enlace
  • Utilizar una clase CLR como objeto de origen de enlace
  • Utilizar objetos completos como origen de enlace
  • Utilizar objetos de colección como origen de enlace
  • Requisitos de permiso
  • Temas relacionados

Origen de un enlace

El enlace de datos de Windows Presentation Foundation (WPF) admite los siguientes tipos de origen de enlace:

Origen de enlace

Descripción

Objetos common language runtime (CLR)

Puede enlazar a propiedades públicas, subpropiedades e indizadores de cualquier objeto common language runtime (CLR). El motor de enlace utiliza la reflexión CLR para obtener los valores de las propiedades. Como alternativa, también funcionan con el motor de enlace los objetos que implementan ICustomTypeDescriptor o que tienen un TypeDescriptionProvider registrado.

Vea la sección siguiente para obtener más información sobre cómo implementar una clase que puede actuar como objeto de origen.

Datos ADO.NET

Puede enlazar a objetos ADO.NET como DataTable. El objeto DataView de ADO.NET implementa IBindingList, que proporciona notificaciones de cambios para los que el motor de enlace realiza escuchas.

Para obtener un ejemplo, vea Ejemplo Binding to an ADO.NET DataSet.

Datos XML

Puede enlazar a y ejecutar consultas XPath en XmlNode, XmlDocument o XmlElement. Una manera cómoda de tener acceso a los datos XML que constituyen el origen de enlace en el marcado es utilizar un objeto XmlDataProvider. Para obtener más información, vea Cómo: Enlazar a datos XML mediante XMLDataProvider y consultas XPath.

También puede enlazar a XElement o XDocument, o bien enlazar a los resultados de consultas ejecutadas en objetos de estos tipos mediante LINQ for XML. Una manera cómoda de tener acceso a los datos XML que constituyen el origen de enlace en el marcado es utilizar un objeto ObjectDataProvider. Para obtener más información, vea Cómo: Enlazar a los resultados de una consulta LINQ for XML, XDocument o XElement.

DependencyObject

Puede enlazar a propiedades de dependencia de cualquier objeto DependencyObject. Para obtener un ejemplo, vea Cómo: Enlazar las propiedades de dos controles.

Utilizar una clase CLR como objeto de origen de enlace

En esta sección se explica lo que debe saber para implementar una clase CLR para que actúe como un objeto de origen.

Proporcionar notificaciones de cambio

Si utiliza el enlace OneWay o TwoWay (por ejemplo, si desea que la interfaz de usuario se actualice cuando cambien dinámicamente las propiedades de origen), debe implementar un mecanismo apropiado de notificación de cambio de propiedad. El mecanismo recomendado es que la clase CLR implemente la interfaz INotifyPropertyChanged. Para obtener más detalles, vea Cómo: Implementar la notificación de cambio de propiedad.

Si no implementa INotifyPropertyChanged, entonces deberá utilizar su propio sistema de notificación para asegurarse de que los datos utilizados en un enlace estén siempre actualizados. Puede proporcionar notificaciones de cambio admitiendo el modelo PropertyChanged para cada propiedad cuyas notificaciones de cambio desea obtener. Para admitir este modelo, se define un evento nombreDePropiedadChanged para cada propiedad, donde nombreDePropiedad es el nombre de la propiedad. El evento se provoca cada vez que cambia la propiedad.

Si el objeto de origen implementa un mecanismo de notificación de cambio de propiedades apropiado, el destino se actualiza automáticamente. Si por cualquier motivo el objeto de origen no proporciona notificaciones de cambio de propiedad correctas, puede utilizar el método UpdateTarget para actualizar explícitamente la propiedad de destino.

Otras características

En la lista siguiente se proporcionan otros puntos importantes que tener en cuenta:

  • Si desea crear el objeto en XAML, la clase debe tener un constructor predeterminado. En algunos lenguajes de .NET, como C#, el constructor predeterminado puede crearse automáticamente.

  • Las propiedades que se utilizan como propiedades de origen para un enlace deben ser propiedades públicas de la clase. Para los enlaces no se puede tener acceso a las propiedades de interfaz definidas explícitamente; ni tampoco a las propiedades protegidas, privadas o virtuales que no tengan una implementación base.

  • No se puede enlazar a los campos públicos de una clase CLR.

  • El tipo de la propiedad declarado en la clase es el tipo que se pasa al enlace. Sin embargo, el tipo que el enlace utiliza en realidad depende del tipo de la propiedad del destino del enlace, no de la propiedad de origen. Si existe alguna diferencia de tipos, puede ser conveniente escribir a un convertidor para administrar la manera de pasar inicialmente la propiedad personalizada al enlace. Para obtener más información, vea IValueConverter.

Utilizar objetos completos como origen de enlace

Puede utilizar un objeto completo como origen de un enlace. Para ello, se especifica el objeto como origen del enlace mediante la propiedad Source o DataContext y, a continuación, no se proporciona ninguna ruta de acceso excepto una declaración de enlace en blanco: {Binding}. Los escenarios en que puede resultar útil esta posibilidad son el enlace a objetos de tipo String, el enlace a objetos con varias propiedades que le interesan o el enlace a objetos de colección. Para obtener un ejemplo de enlace a un objeto de colección completo, vea Cómo: Usar el patrón principal-detalle con datos jerárquicos.

Observe que puede ser necesario aplicar la lógica personalizada para que los datos sean significativos para la propiedad de destino enlazada. La lógica personalizada puede consistir en un convertidor personalizado (si no existe la conversión de tipos predeterminada) o en un objeto DataTemplate. Para obtener más información sobre convertidores, vea la sección de conversión de datos de Información general sobre el enlace de datos. Para obtener más información sobre plantillas de datos, vea Información general sobre plantillas de datos.

Utilizar objetos de colección como origen de enlace

Con frecuencia, el objeto que se desea utilizar como origen es una colección de varios objetos personalizados, cada uno de los cuales representa un objeto de datos que actúa como origen para una instancia de un enlace repetido. Por ejemplo, supongamos que tiene una colección CustomerOrders compuesta de objetos CustomerOrder, y que la aplicación itera en la colección para determinar cuántas órdenes hay y qué datos contiene cada una.

Es posible enumerar cualquier colección que implementa la interfaz IEnumerable. Sin embargo, para configurar enlaces dinámicos de modo que las inserciones o eliminaciones que se realicen en la colección actualicen la interfaz de usuario de forma automática, la colección debe implementar la interfaz INotifyCollectionChanged. Esta interfaz expone un evento que debe provocarse siempre que se realicen cambios en la colección subyacente.

WPF proporciona la clase ObservableCollection<T>, que es una implementación integrada de una recolección de datos que expone la interfaz INotifyCollectionChanged. Los objetos de datos individuales de la colección deben cumplir los requisitos que se describen en las secciones anteriores. Para consultar un ejemplo, vea Cómo: Crear y enlazar a una colección ObservableCollection. Antes de implementar su propia colección, considere la posibilidad de utilizar ObservableCollection<T> o una de las clases de colección existentes, como List<T>, Collection<T> y BindingList<T>, entre otras muchas.

WPF nunca se enlaza directamente a una colección. Si se especifica una colección como origen de datos, WPF se enlaza en realidad a la vista predeterminada de la colección. Para obtener información sobre las vistas predeterminadas, vea Información general sobre el enlace de datos.

Si cuenta con un escenario avanzado y desea implementar su propia colección, considere la posibilidad de utilizar IList, que proporciona una colección no genérica de objetos a los que se puede obtener acceso individualmente por índice y, por consiguiente, proporciona el máximo rendimiento.

Requisitos de permiso

En la tabla siguiente se resume a qué tipos de propiedad se puede enlazar en una aplicación que se ejecuta con permisos de plena confianza o de confianza parcial:

Tipo de propiedad

(todos los modificadores de acceso)

Propiedad CLR

Propiedad CLR

Propiedad de dependencia

Dependencia

Propiedad

Nivel de confianza

Plena confianza

Confianza parcial

Plena confianza

Confianza parcial

Clase pública

Clase privada

No

En esta tabla se describen los puntos importantes siguientes sobre los requisitos de permiso en el enlace de datos:

  • Para las propiedades CLR, el enlace de datos funciona siempre que el motor de enlace pueda tener acceso a la propiedad de origen mediante la reflexión. De lo contrario, el motor de enlace emite una advertencia que indica que no se puede buscar la propiedad y utiliza el valor de reserva o el valor predeterminado, si está disponible.

  • Siempre se puede enlazar a propiedades de dependencia.

El requisito de permiso para el enlace XML es similar: en un recinto de seguridad de confianza parcial, se produce un error de XmlDataProvider cuando no se dispone de permiso para tener acceso a los datos de que se trate.

Para obtener más información acerca de la seguridad de confianza parcial, vea Seguridad de confianza parcial en Windows Presentation Foundation.

Vea también

Tareas

Cómo: Especificar el origen de enlace

Conceptos

Información general sobre el enlace de datos

Información general sobre el enlace de datos de WPF con LINQ to XML

Optimizar el rendimiento: Enlace de datos

Referencia

ObjectDataProvider

XmlDataProvider

Otros recursos

Temas "Cómo..." sobre enlace de datos