Información general sobre orígenes de enlaces (WPF .NET)

En el enlace de datos, el objeto de origen de enlace hace referencia al objeto de que se obtienen los 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 objetos DependencyObject.

Tipos de orígenes de enlace

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

Implementación de un origen de enlace en los objetos

Los objetos CLR pueden convertirse en 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 enlaces OneWay o TwoWay, implemente un mecanismo de notificación adecuado de «propiedad cambiada». El mecanismo recomendado es que CLR o la clase dinámica implementen la interfaz INotifyPropertyChanged. Para obtener más información, consulte Cómo: Implementar notificaciones de propiedad cambiada (.NET Framework).

Hay dos maneras de notificar a un suscriptor una propiedad cambiada:

  1. Implemente la interfaz INotifyPropertyChanged.

    Este es el mecanismo recomendado para las notificaciones. El INotifyPropertyChanged proporciona el evento PropertyChanged, que el sistema de enlace respeta. Al generar este evento y proporcionar el nombre de la propiedad que ha cambiado, notificará a un destino de enlace del cambio.

  2. Implemente el patrón PropertyChanged.

    Cada propiedad que necesita notificar que ha cambiado a un destino de enlace tiene un evento correspondiente PropertyNameChanged, donde PropertyName es el nombre de la propiedad. Se genera el evento cada vez que cambia la propiedad.

Si el origen de enlace implementa uno de estos mecanismos de notificación, se producen automáticamente las actualizaciones de destino. Si por algún motivo el origen de enlace no proporciona las notificaciones de propiedad cambiada adecuadas, puede usar el método UpdateTarget para actualizar la propiedad de destino de forma explícita.

Otras características

En la lista siguiente se proporcionan otros puntos importantes a 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, se debe crear el objeto de datos en el código y asignarlo directamente al contexto de datos del árbol de objetos XAML o como origen de enlace del enlace.

  • Las propiedades que se utilizan como propiedades de origen de enlace para un enlace deben ser propiedades públicas de la clase. No se puede acceder a las propiedades de interfaz definidas de manera explícita con fines de enlace, ni tampoco las propiedades protegidas, privadas, internas o virtuales que no tengan implementación base.

  • No se puede enlazar a campos públicos.

  • El tipo de la propiedad declarada en la clase es el tipo que se pasa al enlace. 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 de enlace. Si hay una diferencia en el tipo, se puede escribir un convertidor para controlar cómo se pasa inicialmente la propiedad personalizada al enlace. Para obtener más información, vea IValueConverter.

Objetos completos como origen de enlace

Puede utilizar objetos completos como origen de enlace. Especifique un origen de enlace mediante la propiedad Source o DataContext y, a continuación, proporcione una declaración de enlace en blanco: {Binding}. Los escenarios en los que esto resulta útil incluyen enlaces a objetos que son del tipo cadena, enlaces a objetos con varias propiedades en las que esté interesado o el enlace a objetos de la colección. Para obtener un ejemplo de enlace a un objeto completo de colección, consulte Cómo usar el patrón principal-detalle con datos jerárquicos (.NET Framework).

Puede ser necesario aplicar lógica personalizada para que los datos sean significativos para la propiedad de destino enlazada. La lógica personalizada puede tener la forma de un convertidor personalizado o un DataTemplate. Consulte Conversión de datos para obtener más información sobre los convertidores. 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 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, podría tener una colección de CustomerOrders formada por objetos CustomerOrder, donde la aplicación itera en la colección para determinar cuántas órdenes hay y los datos contenidos en cada orden.

Puede enumerar en cualquier colección que implemente la interfaz IEnumerable. Pero para poder configurar enlaces dinámicos para que las inserciones o las eliminaciones en la colección actualicen la interfaz de usuario automáticamente, 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 colección de datos que expone la interfaz INotifyCollectionChanged. Los objetos de datos individuales dentro de la colección deben cumplir los requisitos descritos en las secciones anteriores. Para obtener un ejemplo, consulte Cómo crear y enlazar a un 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 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 el uso de la interfaz IList. Esta interfaz proporciona una colección no genérica de objetos a los que se puede acceder individualmente por índice, lo que puede mejorar el rendimiento.

Requisitos de permisos en el enlace 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.

Vea también