Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el enlace de datos, el objeto de origen de enlace hace referencia al objeto del que se obtienen datos. En este artículo se describen los tipos de objetos que puede usar como origen de enlace, como objetos CLR de .NET, XML y DependencyObject objetos.
Tipos de fuentes de vinculación
El enlace de datos de Windows Presentation Foundation (WPF) admite los siguientes tipos de origen de enlace:
Objetos de Common Language Runtime (CLR) de .NET
Puede enlazar a propiedades públicas, subpropiedades e indizadores de cualquier objeto de Common Language Runtime (CLR). El motor de enlace usa la reflexión CLR para obtener los valores de las propiedades. Los objetos que implementan ICustomTypeDescriptor o tienen registrado TypeDescriptionProvider también funcionan con el motor de enlace.
Para obtener más información sobre cómo implementar una clase que puede servir como origen de enlace, consulte Implementación de un origen de enlace en los objetos más adelante en este artículo.
Objetos dinámicos
Puede enlazar a las propiedades y indexadores disponibles de un objeto que implementa la IDynamicMetaObjectProvider interfaz . Si puede acceder al miembro en código, puede asociarlo. Por ejemplo, si un objeto dinámico permite acceder a un miembro del código a través de
SomeObject.AProperty
, puede enlazarlo estableciendo la ruta de enlace enAProperty
.objetos ADO.NET
Puede enlazar a objetos ADO.NET, como DataTable. El ADO.NET DataView implementa la interfaz IBindingList, que proporciona notificaciones de cambio a las que el motor de enlace escucha.
Objetos XML
Puede enlazar y ejecutar consultas
XPath
en un XmlNode, XmlDocument o XmlElement. Una manera cómoda de acceder a los datos XML que es la fuente de enlace en el marcado es usar un objeto XmlDataProvider. Para obtener más información, vea Enlazar a datos XML mediante xmlDataProvider y consultas XPath (.NET Framework).También puede enlazar a un XElement o un XDocument, o enlazar a los resultados de las consultas que se ejecutan en objetos de estos tipos utilizando LINQ to XML. Una manera cómoda de usar LINQ to XML para acceder a los datos XML que son el origen de enlace en el marcado es usar un objeto ObjectDataProvider. Para obtener más información, vea Enlazar a XDocument, XElement o LINQ for XML Query Results (.NET Framework).
DependencyObject Objetos
Puede enlazar a las propiedades de dependencia de cualquier DependencyObject. Para obtener un ejemplo, vea Enlazar las propiedades de dos controles (.NET Framework).
Implementación de un origen de enlace en los objetos
Los objetos CLR pueden actuar como orígenes de enlace. Hay algunas cosas que debe tener en cuenta al implementar una clase para que actúe como origen de enlace.
Proporcionar notificaciones de cambios
Si usa OneWay o TwoWay vinculación, implemente un mecanismo de notificación "propiedad modificada" adecuado. El mecanismo recomendado es para que CLR o la clase dinámica implementen la INotifyPropertyChanged interfaz. Para obtener más información, vea How to: Implement Property Change Notification (.NET Framework).
Hay dos maneras de notificar a un suscriptor un cambio de propiedad:
Implemente la INotifyPropertyChanged interfaz.
Este es el mecanismo recomendado para las notificaciones. INotifyPropertyChanged proporciona el evento PropertyChanged, que respeta el sistema de enlace. Al generar este evento y proporcionar el nombre de la propiedad que cambió, notificará a un destino de enlace del cambio.
Implemente el
PropertyChanged
patrón.Cada propiedad que necesita notificar a un destino de enlace que ha cambiado, tiene un evento correspondiente
PropertyNameChanged
, dondePropertyName
es el nombre de la propiedad. Generas el evento cada vez que cambia la propiedad.
Si el origen de enlace implementa uno de estos mecanismos de notificación, las actualizaciones de destino se producen automáticamente. Si por algún motivo el origen del enlace no proporciona las notificaciones de cambio de propiedad adecuadas, puede usar el UpdateTarget método para actualizar la propiedad de destino explícitamente.
Otras características
En la lista siguiente se proporcionan otros puntos importantes que se deben tener en cuenta:
Los objetos de datos que actúan como orígenes de enlace se pueden declarar en XAML como recursos, siempre que tengan un constructor sin parámetros. De lo contrario, debes crear el objeto de datos en el código y asignarlo directamente al contexto de datos del árbol de objetos XAML, o utilizarlo como origen del enlace.
Las propiedades que se usan como propiedades de origen de enlace deben ser propiedades públicas de la clase. No se puede tener acceso a las propiedades de interfaz definidas explícitamente con fines de enlace, ni propiedades privadas, internas o virtuales que no tienen ninguna implementación base.
No puedes hacer un enlace a campos públicos.
El tipo de la propiedad declarada en la clase es el tipo que se pasa a la vinculación. Sin embargo, el tipo utilizado en última instancia por el enlace depende del tipo de la propiedad de destino de enlace, no de la propiedad de origen del enlace. Si hay una diferencia en el tipo, es posible que quiera escribir un convertidor para gestionar la forma en que inicialmente se pasa la propiedad personalizada a la vinculación. Para obtener más información, consulte IValueConverter.
Objetos completos como origen de enlace
Puede usar un objeto completo como origen de enlace. Especifique un origen de enlace usando la propiedad Source o DataContext, y luego proporcione una declaración de enlace en blanco: {Binding}
. Los escenarios en los que esto resulta útil incluyen el enlace a objetos que son de tipo cadena, enlaces a objetos con varias propiedades que le interesan o enlaces 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 de Master-Detail con datos jerárquicos (.NET Framework).
Es posible que necesite aplicar lógica personalizada para que los datos sean significativos para la propiedad enlazada de destino. La lógica personalizada puede estar en forma de un convertidor personalizado o un DataTemplate. Para obtener más información sobre los convertidores, consulte Conversión de datos. Para obtener más información sobre las plantillas de datos, consulte Información general sobre plantillas de datos (.NET Framework).
Objetos de colección como origen de enlace
A menudo, el objeto que desea usar como origen de enlace es una colección de objetos personalizados. Cada objeto actúa como origen para una instancia de un enlace repetido. Por ejemplo, puede tener una CustomerOrders
colección que consta de CustomerOrder
objetos, donde la aplicación recorre en iteración la colección para determinar cuántos pedidos existen y los datos contenidos en cada orden.
Puede recorrer cualquier colección que implemente la interfaz IEnumerable. Sin embargo, para configurar enlaces dinámicos para que las inserciones o eliminaciones de la colección actualicen la interfaz de usuario automáticamente, la colección debe implementar la INotifyCollectionChanged interfaz. Esta interfaz expone un evento que se debe generar cada vez que cambia la colección subyacente.
La ObservableCollection<T> clase es una implementación integrada de una colección de datos que expone la INotifyCollectionChanged interfaz. Los objetos de datos individuales de la colección deben cumplir los requisitos descritos en las secciones anteriores. Para obtener un ejemplo, vea How to Create and Bind to an ObservableCollection (.NET Framework). Antes de implementar su propia colección, considere la posibilidad de usar ObservableCollection<T> o una de las clases de colección existentes, como List<T>, Collection<T>y BindingList<T>, entre muchas otras.
Cuando se especifica una colección como origen de enlace, WPF no se enlaza directamente a la colección. En su lugar, WPF se enlaza realmente a la vista predeterminada de la colección. Para obtener información sobre las vistas predeterminadas, consulte Uso de una vista predeterminada.
Si tiene un escenario avanzado y desea implementar su propia colección, considere la posibilidad de usar la IList interfaz . Esta interfaz proporciona una colección no genérica de objetos a los que el índice puede acceder individualmente, lo que puede mejorar el rendimiento.
Requisitos de permisos en la vinculación de datos
A diferencia de .NET Framework, .NET se ejecuta con seguridad de plena confianza. Todos los enlaces de datos se ejecutan con el mismo acceso que el usuario que ejecuta la aplicación.
Consulte también
.NET Desktop feedback