Saya mendapat situasi di mana saya perlu menunjukkan nilai integer, terikat ke properti pada konteks data saya, setelah meletakkannya melalui dua konversi terpisah:
- Membalikkan nilai dalam rentang (misalnya rentang 1 hingga 100; nilai dalam konteks data adalah 90; pengguna melihat nilai 10)
- mengubah angka menjadi string
Saya menyadari saya dapat melakukan kedua langkah dengan membuat konverter saya sendiri (yang mengimplementasikan IValueConverter). Namun, saya sudah memiliki konverter nilai terpisah yang hanya melakukan langkah pertama, dan langkah kedua dicakup oleh Int32Converter.
Apakah ada cara agar saya dapat menghubungkan kedua kelas yang ada ini di XAML tanpa harus membuat kelas lebih lanjut yang menggabungkannya?
Jika saya perlu mengklarifikasi semua ini, beri tahu saya. :)
Terima kasih.
sumber
return this.Reverse<IValueConverter>().Aggregate(value, (current, converter) => converter.ConvertBack(current, targetType, parameter, culture));
Menemukan apa yang saya cari, dengan izin dari Josh Smith: Piping Value Converters (link archive.org) .
Dia mendefinisikan
ValueConverterGroup
kelas, yang penggunaannya di XAML persis seperti yang saya harapkan. Berikut contohnya:Barang bagus. Terima kasih, Josh. :)
sumber
Implementasi Town dari proyek Silverlight Gareth Evans sangat bagus, namun tidak mendukung parameter konverter yang berbeda.
Saya memodifikasinya sehingga Anda dapat memberikan parameter, dipisahkan dengan koma (kecuali jika Anda menghindarinya tentunya).
Konverter:
Catatan: ConvertBack tidak dilaksanakan di sini, lihat saya Intisari untuk versi lengkap.
Penerapan:
sumber
Ya, ada cara untuk mengonversi konverter tetapi tidak terlihat bagus dan Anda tidak membutuhkannya di sini. Jika Anda pernah membutuhkan ini, tanyakan pada diri Anda, apakah itu benar-benar cara yang harus dilakukan? Sederhana selalu berfungsi lebih baik bahkan jika Anda harus menulis konverter Anda sendiri.
Dalam kasus khusus Anda, yang perlu Anda lakukan hanyalah memformat nilai yang dikonversi menjadi string.
StringFormat
properti di aBinding
adalah teman Anda di sini.sumber
Berikut adalah perpanjangan kecil dari jawaban Town untuk mendukung multi-binding:
sumber