Información general sobre orígenes de enlaces
En el enlace de datos, el objeto de origen de enlace hace referencia al objeto del que se obtienen los datos. En este tema se describen los tipos de objetos que pueden utilizarse como origen de enlace.
Este tema contiene las secciones siguientes.
- Tipos de origen de enlace
- Implementar una clase para el origen de enlace
- Utilizar objetos completos como origen de enlace
- Utilizar objetos de colección como origen de enlace
- Requisitos de permisos en el enlace de datos
- Temas relacionados
Tipos de origen de 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. Para obtener más información sobre cómo implementar una clase que sirva como un origen de enlace, vea Implementar una clase para el origen de enlace posterior en este tema. |
objetos dinámicos |
Puede enlazar a las propiedades e indizadores disponibles de un objeto que implemente la interfaz IDynamicMetaObjectProvider. Si puede tener acceso al miembro en código, puede llevar a cabo el enlace. Por ejemplo, si un objeto dinámico permite tener acceso a un miembro en el código a través de someObjet.AProperty, puede enlazar a él estableciendo la ruta de acceso de enlace en AProperty. |
Objetos ADO.NET |
Puede enlazar a objetos de ADO.NET, como DataTable. ADO.NET DataView implementa la interfaz IBindingList, que proporciona notificaciones de cambios para las que el motor de enlace realiza escuchas. |
Objetos 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 to XML. Una manera cómoda de usar LINQ to XML para tener acceso a los datos XML que son 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. |
Objetos DependencyObject |
Puede enlazar a propiedades de dependencia de cualquier objeto DependencyObject. Para obtener un ejemplo, vea Cómo: Enlazar las propiedades de dos controles. |
Implementar una clase para el origen de enlace
Puede crear orígenes de enlace propios. En esta sección se explica lo que debe saber para implementar una clase para que actúe como un origen de enlace.
Proporcionar notificaciones de cambio
Si utiliza el enlace OneWay o TwoWay (porque desea que la UI se actualice cuando cambien dinámicamente las propiedades del origen de enlace), debe implementar un mecanismo apropiado de notificación de cambio de propiedad. El mecanismo recomendado es que CLR o la clase dinámica implemente la interfaz INotifyPropertyChanged. Para obtener más información, consulte Cómo: Implementar la notificación de cambio de propiedad.
Si crea un objeto CLR que no implementa INotifyPropertyChanged, 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 origen de enlace implementa uno de estos mecanismo de notificación, el destino se actualiza automáticamente. Si por cualquier motivo el origen de enlace 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 de enlace 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, internas o virtuales que no tengan una implementación base.
No puede enlazar a campos públicos.
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 de enlace. 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 un origen de enlace. Puede especificar un origen de enlace utilizando la propiedad DataContext o Source y, a continuación, proporcionando 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
A menudo, el objeto que desea utilizar como origen de enlace es una colección de objetos personalizados. Cada objeto actúa como el 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 UI 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.
La clase ObservableCollection<T> 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 obtener 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 enlace, 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 tiene un escenario avanzado y desea implementar una colección propia, considere el uso de la interfaz IList. IList proporciona una colección no genérica de objetos a los que se puede tener acceso individualmente por índice, lo que puede mejorar el rendimiento.
Requisitos de permisos en el enlace de datos
Al enlazar datos, debe tener en cuenta el nivel de confianza de la aplicación. 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 de objeto dinámico |
Propiedad de objeto dinámico |
Propiedad CLR |
Propiedad CLR |
Propiedad de dependencia |
Propiedad de dependencia |
---|---|---|---|---|---|---|
Nivel de confianza |
Plena confianza |
Confianza parcial |
Plena confianza |
Confianza parcial |
Plena confianza |
Confianza parcial |
Clase pública |
Sí |
Sí |
Sí |
Sí |
Sí |
Sí |
Clase no pública |
Sí |
No |
Sí |
No |
Sí |
Sí |
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 de enlace 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.
Puede enlazar a propiedades en objetos dinámicos que se definen en tiempo de compilación o en tiempo de ejecución.
Siempre se puede enlazar a propiedades de dependencia.
El requisito de permisos para el enlace a XML es similar. En un espacio aislado de confianza parcial, XmlDataProvider produce un error cuando no tiene permisos para tener acceso a los datos especificados.
Los objetos con tipo anónimo son internos. Solo puede enlazar a las propiedades de tipos anónimos cuando se ejecuta con plena confianza. Para obtener más información sobre los tipos anónimos, vea Tipos anónimos (Guía de programación de C#) o Tipos anónimos (Visual Basic) (Visual Basic).
Para obtener más información acerca de la seguridad de confianza parcial, vea Seguridad de confianza parcial de WPF.
Vea también
Tareas
Cómo: Especificar el origen de enlace
Referencia
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