Pengikatan data melalui IPropertyNotifySink

Objek yang mendukung properti, misalnya, melalui OLE Automation dan antarmuka IDispatch , mungkin ingin memungkinkan klien diberi tahu ketika properti tertentu mengubah nilai. Properti seperti itu disebut properti yang dapat diikat karena pemberitahuan memungkinkan klien untuk menyinkronkan tampilannya sendiri dari nilai properti objek saat ini. Selain itu, objek yang sama mungkin ingin memungkinkan klien mengontrol kapan properti tertentu diizinkan untuk berubah. Properti tersebut disebut properti edit permintaan.

IPropertyNotifySink adalah antarmuka pemberitahuan standar yang mendukung properti yang dapat diikat dan diedit permintaan. IPropertyNotifySink didukung dari objek dengan properti sebagai antarmuka keluar. Artinya, antarmuka itu sendiri diimplementasikan oleh objek sink klien, dan klien menghubungkan sink ke objek pendukung melalui mekanisme titik koneksi yang dijelaskan sebelumnya. IPropertyNotifySinkdidefinisikan sebagai berikut:

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

Ketika objek ingin memberi tahu sink yang terhubung bahwa properti yang dapat diikat yang diidentifikasi dengan DISPID tertentu telah berubah, objek memanggil OnChanged. Jika objek mengubah beberapa properti sekaligus, objek dapat meneruskan DISPID_UNKNOWN ke OnChanged dalam hal ini klien me-refresh cache-nya dari semua nilai properti yang menarik.

Ketika properti edit permintaan akan berubah, objek dapat bertanya kepada klien apakah akan memungkinkan perubahan tersebut terjadi. Objek memanggil OnRequestEdit melewati DISPID properti yang dimaksud (atau DISPID_UNKNOWN untuk mengidentifikasi semua properti). Sink klien mengembalikan S_OK untuk menunjukkan bahwa perubahan diizinkan, atau S_FALSE (atau kesalahan) untuk menunjukkan bahwa perubahan tidak diizinkan. Ketika objek memanggil OnRequestEdit, diperlukan untuk mematuhi keinginan klien dengan mengikuti semantik S_OK dan S_FALSE mengembalikan nilai yang tepat.

Perhatikan bahwa OnRequestEdit tidak dapat digunakan untuk validasi data karena pada saat panggilan, nilai baru properti belum tersedia. Pemberitahuan hanya dapat digunakan untuk mengontrol status baca-saja untuk properti.

Objek mengontrol properti mana yang dapat diikat dan meminta edit dan menandai properti tersebut dalam informasi jenis objek. Dalam informasi jenis, atribut yang dapat diikat menandai properti sebagai mendukung OnChanged. Atribut requestedit menandai properti sebagai mendukung OnRequestEdit.

Satu properti dapat mendukung kedua perilaku dalam hal ini OnRequestEdit dipanggil terlebih dahulu, dan hanya jika perubahan diizinkan adalah OnChanged yang dipanggil.

Satu pengecualian untuk perilaku properti tersebut adalah bahwa tidak ada pemberitahuan yang dikirim sebagai akibat dari inisialisasi objek atau prosedur pemuatan. Pada saat seperti itu, diasumsikan bahwa semua properti berubah dan bahwa semua harus diizinkan untuk berubah. Oleh karena itu, pemberitahuan ke antarmuka ini hanya bermakna dalam konteks objek yang diinisialisasi/dimuat sepenuhnya.

Dua atribut lain dapat diterapkan ke properti dalam informasi jenis objek. Atribut defaultbind menandai properti yang dapat diikat sebagai yang paling mewakili status objek secara keseluruhan. Atribut displaybind menandai properti yang dapat diikat sesuai untuk ditampilkan di antarmuka pengguna klien sendiri.

Halaman Properti dan Lembar Properti