다음을 통해 공유


IPropertyNotifySink를 통한 데이터 바인딩

예를 들어 OLE 자동화 및 IDispatch 인터페이스를 통해 속성을 지원하는 개체는 특정 속성이 값을 변경할 때 클라이언트에 알림을 받을 수 있도록 허용할 수 있습니다. 알림을 통해 클라이언트가 개체의 현재 속성 값에 대한 자체 표시를 동기화할 수 있으므로 이러한 속성을 바인딩 가능한 속성이라고 합니다. 또한 동일한 개체는 클라이언트가 특정 속성을 변경할 수 있는 시기를 제어하도록 허용할 수 있습니다. 이러한 속성을 요청 편집 속성이라고 합니다.

IPropertyNotifySink는 바인딩 가능 및 요청 편집 속성을 지원하는 표준 알림 인터페이스입니다. IPropertyNotifySink 는 나가는 인터페이스로 속성이 있는 개체에서 지원됩니다. 즉, 인터페이스 자체는 클라이언트의 싱크 개체에 의해 구현되고 클라이언트는 앞에서 설명한 연결 지점 메커니즘을 통해 싱크를 지원 개체에 연결합니다. IPropertyNotifySink는 다음과 같이 정의됩니다.

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

개체가 연결된 싱크에 지정된 DISPID로 식별된 바인딩 가능한 속성이 변경되었음을 알리려는 경우 OnChanged를 호출합니다. 개체가 한 번에 여러 속성을 변경하는 경우 클라이언트가 관심 있는 모든 속성 값의 캐시를 새로 고치는 경우 OnChanged 에 DISPID_UNKNOWN 전달할 수 있습니다.

요청 편집 속성이 변경될 때 개체는 클라이언트에 해당 변경이 수행되도록 허용할지 여부를 요청할 수 있습니다. 개체는 문제의 속성의 DISPID를 전달하는 OnRequestEdit 를 호출합니다(또는 모든 속성을 식별하는 DISPID_UNKNOWN). 클라이언트의 싱크는 S_OK 반환하여 변경이 허용됨을 나타내거나 변경이 허용되지 않음을 나타내는 S_FALSE(또는 오류)합니다. 개체가 OnRequestEdit를 호출하는 경우 S_OK 정확한 의미 체계를 따르고 반환 값을 S_FALSE 클라이언트의 요구에 따라야 합니다.

OnRequestEdit는 호출 시 속성의 새 값을 아직 사용할 수 없으므로 데이터 유효성 검사에 사용할 수 없습니다. 알림은 속성에 대한 읽기 전용 상태를 제어하는 데만 사용할 수 있습니다.

개체는 바인딩할 수 있는 속성을 제어하고 이러한 속성을 개체의 형식 정보에서 편집 및 표시를 요청합니다. 형식 정보에서 특성 바인딩 가능 은 속성을 OnChanged를 지원하는 것으로 표시합니다. requestedit 특성은 속성을 OnRequestEdit를 지원하는 것으로 표시합니다.

한 속성은 OnRequestEdit 가 먼저 호출되는 경우와 변경이 허용되는 경우에만 OnChanged 가 호출되는 두 동작을 모두 지원할 수 있습니다.

이러한 속성의 동작에 대한 한 가지 예외는 개체의 초기화 또는 로드 프로시저의 결과로 알림이 전송되지 않는다는 것입니다. 이러한 경우 모든 속성이 변경되고 모든 속성이 변경되도록 허용되어야 한다고 가정합니다. 따라서 이 인터페이스에 대한 알림은 완전히 초기화/로드된 개체의 컨텍스트에서만 의미가 있습니다.

개체의 형식 정보에서 속성에 다른 두 특성을 적용할 수 있습니다. defaultbind 특성은 바인딩 가능한 속성을 개체 전체의 상태를 가장 잘 나타내는 속성으로 표시합니다. displaybind 특성은 바인딩 가능한 속성을 클라이언트의 사용자 인터페이스에 표시하기에 적합한 것으로 표시합니다.

속성 페이지 및 속성 시트