Partager via


Liaison de données via IPropertyNotifySink

Les objets qui prennent en charge des propriétés, par exemple, via OLE Automation et l’interface IDispatch , peuvent souhaiter permettre aux clients d’être avertis lorsque certaines propriétés changent de valeur. Une telle propriété est appelée propriété pouvant être liée, car les notifications permettent à un client de synchroniser son propre affichage des valeurs de propriété actuelles de l’objet. En outre, les mêmes objets peuvent souhaiter autoriser un client à contrôler quand certaines propriétés sont autorisées à changer. Ces propriétés sont appelées propriétés de modification de demande.

IPropertyNotifySink est une interface de notification standard qui prend en charge les propriétés de modification de requête et de liaison. IPropertyNotifySink est pris en charge à partir d’un objet avec des propriétés en tant qu’interface sortante. Autrement dit, l’interface elle-même est implémentée par l’objet récepteur d’un client et le client connecte le récepteur à l’objet de prise en charge via le mécanisme de point de connexion décrit précédemment. IPropertyNotifySinkest défini comme suit :

interface IPropertyNotifySink : IUnknown 
  { 
    HRESULT OnChanged([in] DISPID dispID); 
    HRESULT OnRequestEdit([in] DISPID dispID); 
  } 
 

Lorsqu’un objet souhaite informer ses récepteurs connectés qu’une propriété pouvant être liée identifiée à un DISPID donné a changé, il appelle OnChanged. Si un objet modifie plusieurs propriétés à la fois, il peut passer DISPID_UNKNOWN à OnChanged , auquel cas un client actualise son cache de toutes les valeurs de propriété intéressantes.

Lorsqu’une propriété de modification de demande est sur le point de changer, un objet peut demander au client s’il autorise cette modification à se produire. L’objet appelle OnRequestEdit en passant le DISPID de la propriété en question (ou DISPID_UNKNOWN pour identifier toutes les propriétés). Le récepteur du client retourne S_OK pour indiquer que la modification est autorisée, ou S_FALSE (ou une erreur) pour indiquer que la modification n’est pas autorisée. Lorsqu’un objet appelle OnRequestEdit, il est nécessaire d’obéir aux souhaits du client en suivant la sémantique exacte de S_OK et S_FALSE valeurs de retour.

Notez qu’OnRequestEdit ne peut pas être utilisé pour la validation des données, car au moment de l’appel, la nouvelle valeur de la propriété n’est pas encore disponible. La notification ne peut être utilisée que pour contrôler un état en lecture seule pour une propriété.

Les objets contrôlent les propriétés pouvant être liées et demandent à modifier et à marquer ces propriétés dans les informations de type de l’objet. Dans les informations de type, l’attribut bindable marque une propriété comme prenant en charge OnChanged. L’attribut requestedit marque une propriété comme prenant en charge OnRequestEdit.

Une propriété peut prendre en charge les deux comportements, auquel cas OnRequestEdit est appelé en premier, et uniquement si la modification est autorisée est appelé OnChanged .

La seule exception au comportement de ces propriétés est qu’aucune notification n’est envoyée à la suite des procédures d’initialisation ou de chargement d’un objet. À ce moment-là, il est supposé que toutes les propriétés changent et que toutes doivent être autorisées à changer. Les notifications à cette interface ne sont donc significatives que dans le contexte d’un objet entièrement initialisé/chargé.

Deux autres attributs peuvent être appliqués aux propriétés dans les informations de type d’un objet. L’attribut defaultbind marque une propriété pouvant être liée comme étant celle qui représente le mieux l’état de l’objet dans son ensemble. L’attribut displaybind marque une propriété pouvant être liée comme adaptée à l’affichage dans la propre interface utilisateur d’un client.

Pages de propriétés et feuilles de propriétés