Enlace de datos a través de IPropertyNotifySink
Los objetos que admiten propiedades, por ejemplo, a través de ole Automation y la interfaz IDispatch , pueden querer permitir que se notifique a los clientes cuando ciertas propiedades cambien el valor. Esta propiedad se denomina propiedad enlazable porque las notificaciones permiten a un cliente sincronizar su propia presentación de los valores de propiedad actuales del objeto. Además, es posible que los mismos objetos deseen permitir que un cliente controle cuándo se permiten cambiar determinadas propiedades. Estas propiedades se denominan propiedades de edición de solicitudes.
IPropertyNotifySink es una interfaz de notificación estándar que admite propiedades enlazables y de edición de solicitudes. IPropertyNotifySink se admite desde un objeto con propiedades como una interfaz saliente. Es decir, la propia interfaz se implementa mediante el objeto receptor de un cliente y el cliente conecta el receptor al objeto auxiliar a través del mecanismo de punto de conexión descrito anteriormente. IPropertyNotifySinkse define de la siguiente manera:
interface IPropertyNotifySink : IUnknown
{
HRESULT OnChanged([in] DISPID dispID);
HRESULT OnRequestEdit([in] DISPID dispID);
}
Cuando un objeto desea notificar a sus receptores conectados que ha cambiado una propiedad enlazable identificada con un DISPID determinado, llama a OnChanged. Si un objeto cambia varias propiedades a la vez, puede pasar DISPID_UNKNOWN a OnChanged en cuyo caso un cliente actualiza su caché de todos los valores de propiedad de interés.
Cuando una propiedad de edición de solicitud está a punto de cambiar, un objeto puede preguntar al cliente si permitirá que se produzca ese cambio. El objeto llama a OnRequestEdit pasando el DISPID de la propiedad en cuestión (o DISPID_UNKNOWN para identificar todas las propiedades). El receptor del cliente devuelve S_OK para indicar que se permite el cambio o S_FALSE (o un error) para indicar que no se permite el cambio. Cuando un objeto llama a OnRequestEdit, es necesario obedecer los deseos del cliente siguiendo la semántica exacta de S_OK y S_FALSE valores devueltos.
Tenga en cuenta que OnRequestEdit no se puede usar para la validación de datos porque en el momento de la llamada, el nuevo valor de la propiedad aún no está disponible. La notificación solo se puede usar para controlar un estado de solo lectura para una propiedad.
Los objetos controlan qué propiedades son enlazables y solicitan edición y marcan estas propiedades en la información de tipo del objeto. En la información de tipo, el atributo enlazable marca una propiedad como compatible con OnChanged. El atributo requestedit marca una propiedad como compatible con OnRequestEdit.
Una propiedad puede admitir ambos comportamientos en cuyo caso se llama a OnRequestEdit en primer lugar y solo si se permite el cambio se llama a OnChanged .
La única excepción al comportamiento de estas propiedades es que no se envían notificaciones como resultado de los procedimientos de inicialización o carga de un objeto. En tales momentos, se supone que todas las propiedades cambian y que todos deben poder cambiar. Por lo tanto, las notificaciones a esta interfaz solo son significativas en el contexto de un objeto totalmente inicializado o cargado.
Se pueden aplicar otros dos atributos a las propiedades de la información de tipo de un objeto. El atributo defaultbind marca una propiedad enlazable como la que mejor representa el estado del objeto en su conjunto. El atributo displaybind marca una propiedad enlazable como adecuada para mostrarse en la propia interfaz de usuario de un cliente.
Temas relacionados