Share via


IProvideValueTarget Antarmuka

Definisi

Mewakili layanan yang melaporkan hubungan properti objek situasional untuk evaluasi ekstensi markup.

public interface class IProvideValueTarget
public interface IProvideValueTarget
type IProvideValueTarget = interface
Public Interface IProvideValueTarget

Keterangan

IProvideValueTarget mewakili layanan yang melaporkan informasi mengenai struktur properti objek di sekitar tempat pengonversi nilai dipanggil.

Jenis pengonversi dan ekstensi markup dapat meminta IProvideValueTarget sebagai layanan pada konteks layanan yang disediakan oleh penulis objek XAML, ketika penulis objek XAML memanggil perilaku konversi nilai. Untuk informasi selengkapnya, lihat Jenis Konverter dan Ekstensi Markup untuk XAML dan Konteks Layanan yang Tersedia untuk Jenis Pengonversi dan Ekstensi Markup.

Untuk ekstensi markup secara khusus, skenario di mana IProvideValueTarget berguna adalah menentukan validitas penggunaan situasional ekstensi markup Anda. Misalnya, ekstensi markup Anda mungkin menerapkan mekanisme penangguhan nilai, tetapi menggunakan mekanisme tersebut mungkin hanya sesuai jika objek target mampu menggunakan komponen lain dari mekanisme penangguhan Anda pada durasi. Anda dapat memeriksa karakteristik sistem jenis objek yang dikembalikan sebagai TargetObject dan memastikan bahwa objek mendukung teknik penangguhan Anda. Jika demikian, ekstensi markup Anda mengembalikan nilai, dan jika tidak, ekstensi markup Anda memberikan pengecualian yang akan diambil sebagai pengecualian dalam oleh penulis objek XAML. Skenario serupa memastikan bahwa properti tertentu mendukung kemampuan, dengan memeriksa karakteristik sistem jenis dari TargetProperty.

Meskipun nama IProvideValueTarget API mungkin menyiratkan asosiasi dengan MarkupExtension.ProvideValue, informasi yang dilaporkan oleh IProvideValueTarget juga dapat berguna untuk TypeConverter atau ValueSerializer. TypeConverter atau ValueSerializer biasanya memiliki lebih banyak konteks daripada ekstensi markup karena didedikasikan untuk jenis target atau properti target tertentu, dan dengan demikian validitas situasional biasanya dapat diprediksi dalam sistem jenis. Namun, skenario lain ada. Berikut ini adalah daftar beberapa skenario yang mungkin diterapkan oleh pengonversi jenis atau ekstensi markup:

  • Dapatkan TargetObject untuk membaca nilai instans properti lain pada objek tersebut. Perhatikan bahwa penanganan Anda di sini mungkin perlu kuat untuk nilai yang tidak diatur, karena urutan pemrosesan anggota XAML pada objek target bisa tidak deterministik.

  • Dapatkan TargetObject untuk membaca metadata tingkat jenis, atau untuk memverifikasi bahwa antarmuka yang diperlukan diimplementasikan oleh jenis .

  • Dapatkan TargetProperty untuk membaca metadata properti.

Salah satu skenarionya adalah menggunakan IProvideValueTarget informasi untuk membatasi objek atau properti mana yang diizinkan untuk diatur oleh ekstensi markup Anda.

Sebelum mencoba menggunakan layanan, pastikan bahwa layanan itu sendiri tidak null ketika dikembalikan oleh parameter penyedia layanan yang relevan yang Anda gunakan untuk konteks.

Penting

Saat menggunakan layanan, sangat penting untuk tidak memodifikasi objek yang dirujuk oleh properti , atau objek lain yang dirujuk oleh objek tersebut TargetObject . Untuk WPF secara khusus, perubahan ini dapat menyebabkan perubahan tak terduga yang akan membatalkan sistem properti WPF.

Catatan

Jangan gunakan jenis TargetProperty untuk menentukan jenis ekstensi markup atau pengonversi jenis yang tepat mana yang harus dikembalikan. Itu bukan praktik terbaik. Jenis pengembalian Anda harus konsisten dengan attributing (MarkupExtensionReturnTypeAttribute untuk ekstensi markup) atau pola (nama kelas pengonversi jenis).

Dalam versi .NET Framework sebelumnya, antarmuka ini ada di rakitan khusus WPF WindowsBase. Di .NET Framework 4, IProvideValueTarget berada di rakitan System.Xaml. Untuk informasi selengkapnya, lihat Jenis yang Dimigrasikan dari WPF ke System.Xaml.

Catatan Penggunaan WPF

Layanan ini mendukung fitur kerangka kerja seperti pengikatan pada properti dependensi.

Dalam WPF, layanan yang diwakili oleh IProvideValueTarget dapat mengembalikan objek dan properti untuk situasi di mana nilai yang akan dikembalikan dari ekstensi markup atau pengonversi jenis tergantung pada konteks.

IProvideValueTarget sangat dimanfaatkan dalam implementasi BindingBaseinternal , kelas yang mengimplementasikan mekanisme pengikatan untuk properti dependensi di WPF.

Penyedia layanan internal default untuk WPF menerapkan IProvideValueTarget penggunaan oleh ekstensi markup kustom atau pengonversi jenis. Objek dan properti yang dilaporkan oleh IProvideValueTarget hanya dapat diatur oleh layanan WPF internal. Melampaui definisi ini tentang bagaimana IProvideValueTarget operasi akan memerlukan penentuan penyedia layanan Anda sendiri untuk ekstensi markup dan jenis penggunaan pengonversi yang menerapkan setidaknya IProvideValueTarget layanan dan IXamlTypeResolver , dan itu adalah skenario lanjutan yang tidak dijelaskan di sini.

Nilai null untuk TargetProperty atau TargetObject tidak selalu berarti bahwa ekstensi markup atau pengonversi jenis tidak dapat bertindak, meskipun itu tergantung pada implementasi Anda. Contoh kasus di mana nilai dari IProvideValueTarget null meskipun layanan tersedia adalah jika ekstensi markup Anda ditumpuk dalam ekstensi markup lain, seperti Binding. Implementasi yang bergantung harus IProvideValueTarget selalu memeriksa nilai null jika hanya untuk tujuan melemparkan pengecualian tertentu, jika itu adalah desain yang Anda maksudkan.

Properti

TargetObject

Mendapatkan objek target yang sedang dilaporkan.

TargetProperty

Mendapatkan pengidentifikasi untuk properti target yang sedang dilaporkan.

Berlaku untuk

Lihat juga