예를 들어 OLE Automation 및 IDispatch 인터페이스를 통해 속성을 지원하는 개체는 특정 속성이 값을 변경할 때 클라이언트에 알림을 받도록 허용할 수 있습니다. 알림을 통해 클라이언트가 개체의 현재 속성 값에 대한 자체 표시를 동기화할 수 있으므로 이러한 속성을 바인딩 가능한 속성이라고 합니다. 또한 동일한 개체는 클라이언트가 특정 속성을 변경할 수 있는 시기를 제어하도록 허용할 수 있습니다. 이러한 속성을 요청 편집 속성이라고 합니다.
IPropertyNotifySink 바인딩 가능 및 요청 편집 속성을 지원하는 표준 알림 인터페이스입니다. IPropertyNotifySink 출력 인터페이스로 속성을 가진 객체로부터 지원됩니다. 즉, 인터페이스 자체는 클라이언트의 싱크 개체에 의해 구현되고 클라이언트는 앞에서 설명한 연결 지점 메커니즘을 통해 싱크를 지원 개체에 연결합니다. IPropertyNotifySink다음과 같이 정의됩니다.
interface IPropertyNotifySink : IUnknown
{
HRESULT OnChanged([in] DISPID dispID);
HRESULT OnRequestEdit([in] DISPID dispID);
}
개체가 연결된 싱크에 지정된 DISPID로 식별된 바인딩 가능한 속성이 변경되었음을 알리려는 경우 OnChanged호출합니다. 개체가 여러 속성을 한 번에 변경하면 DISPID_UNKNOWN을 OnChanged에 전달하여 클라이언트가 관심 있는 모든 속성 값의 캐시를 새로 고치도록 할 수 있습니다.
요청 편집 속성이 변경되려고 할 때 개체는 클라이언트에 해당 변경이 수행되도록 허용할지 여부를 요청할 수 있습니다. 개체는 문제의 속성의 DISPID(또는 모든 속성을 식별하는 DISPID_UNKNOWN)를 전달하면서 OnRequestEdit을 호출합니다. 클라이언트의 싱크는 S_OK 반환하여 변경이 허용되었음을 나타내거나 변경이 허용되지 않음을 나타내는 S_FALSE(또는 오류)입니다. 개체가 OnRequestEdit를 호출할 때, S_OK와 S_FALSE의 반환 값의 정확한 의미를 따라 클라이언트의 요구에 맞춰야 합니다.
호출 시 속성의 새 값을 아직 사용할 수 없으므로 OnRequestEdit 데이터 유효성 검사에 사용할 수 없습니다. 알림은 속성에 대한 읽기 전용 상태를 제어하는 데만 사용할 수 있습니다.
개체는 바인딩할 수 있는 속성을 제어하고 개체의 형식 정보에서 이러한 속성을 편집하고 표시를 요청합니다. 형식 정보에서 바인더블 속성은 속성이 OnChanged을 지원함을 표시합니다. requestedit 특성은 속성을 OnRequestEdit 기능을 지원하는 것으로 표시합니다.
한 속성은 두 가지 동작을 모두 지원할 수 있으며, 이 경우 OnRequestEdit이 먼저 호출되고, 변경이 허용되는 경우에만이후에 OnChanged이호출됩니다.
이러한 속성의 동작에 대한 한 가지 예외는 개체의 초기화 또는 로드 프로시저의 결과로 알림이 전송되지 않는다는 것입니다. 이러한 경우 모든 속성이 변경되고 모든 속성이 변경되도록 허용되어야 한다고 가정합니다. 따라서 이 인터페이스에 대한 알림은 완전히 초기화/로드된 개체의 컨텍스트에서만 의미가 있습니다.
개체의 형식 정보의 속성에 다른 두 특성을 적용할 수 있습니다. defaultbind 특성은 바인딩 가능한 속성을 개체 전체의 상태를 가장 잘 나타내는 것으로 표시합니다. displaybind 특성은 클라이언트의 사용자 인터페이스에 표시하기에 적합한 바인딩 가능한 속성을 표시합니다.
관련 항목