Saya menggunakan BooleanToVisibilityConverter
WPF untuk mengikat Visibility
properti dari kontrol ke Boolean
. Ini bekerja dengan baik, tapi aku ingin salah satu kontrol untuk menyembunyikan jika boolean adalah true
, dan menunjukkan jika itu false
.
.net
wpf
binding
visibility
Ruben Bartelink
sumber
sumber
Jawaban:
Laksanakan implementasi IValueConverter Anda sendiri. Contoh implementasi ada di
http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx
Dalam metode Konversi Anda, minta itu mengembalikan nilai yang Anda inginkan daripada default.
sumber
Alih-alih membalikkan, Anda dapat mencapai tujuan yang sama dengan menggunakan
IValueConverter
implementasi generik yang dapat mengonversi nilai Boolean ke nilai target yang dapat dikonfigurasi untuk true dan false. Di bawah ini adalah salah satu implementasinya:Berikutnya, subclass itu di mana
T
adalahVisibility
:Akhirnya, ini adalah bagaimana Anda bisa menggunakan
BooleanToVisibilityConverter
XAML di atas dan mengkonfigurasinya untuk, misalnya, gunakanCollapsed
untuk true danVisible
false:Pembalikan ini berguna ketika Anda ingin mengikat ke properti Boolean dengan nama yang
IsHidden
ditentangIsVisible
.sumber
Visibility
properti di model tampilan Anda.dan kemudian berikan benar atau salah sebagai ConverterParameter
sumber
else if (value is bool?)
bagian itu, ReSharper memberi tahu saya "Ekspresi selalu salah". Juga,if (flag)
bagian itu dapat ditulis ulang dengan lebih ringkasreturn flag ? Visibility.Visible : Visibility.Collapsed;
.var nullable = (bool?)value; flag = nullable.GetValueOrDefault();
dapat dibuat lebih pendek dan sederhana:flag = (bool?)value ?? false;
Menulis sendiri adalah solusi terbaik untuk saat ini. Berikut adalah contoh Konverter yang dapat melakukan kedua cara Normal dan Terbalik. Jika Anda memiliki masalah dengan ini tanyakan saja.
sumber
BooleanToVisibilityConverter
dengan memeriksa parameter untuk null:Parameter direction = Parameter.Normal; if (parameter != null) direction = (Parameter)Enum.Parse(typeof(Parameter), (string)parameter);
Ada juga proyek WPF Converters di Codeplex. Dalam dokumentasi mereka, mereka mengatakan Anda dapat menggunakan MapConverter mereka untuk mengkonversi dari pencacahan Visibilitas ke bool
sumber
Satu lagi cara untuk Mengikat ViewModel Nilai Boolean (IsButtonVisible) dengan Properti Visibilitas Kontrol xaml. Tanpa kode, Tanpa konversi, hanya gaya.
sumber
Atau cara pria malas sejati, cukup gunakan apa yang sudah ada dan balikkan:
sumber
Jika Anda tidak suka menulis konverter khusus, Anda dapat menggunakan pemicu data untuk menyelesaikan ini:
sumber
Saya hanya melakukan posting tentang ini. Saya menggunakan ide yang sama seperti Michael Hohlios. Hanya saja, saya menggunakan Properties alih-alih menggunakan "parameter objek".
Mengikat Visibilitas ke nilai bool di WPF
Menggunakan Properties membuatnya lebih mudah dibaca, menurut pendapat saya.
sumber
Inilah yang saya tulis dan gunakan banyak. Ia menggunakan parameter konverter boolean yang menunjukkan apakah akan membalikkan nilai dan kemudian menggunakan XOR untuk melakukan negasi:
Inilah tabel kebenaran XOR untuk referensi:
sumber
Saya mencari jawaban yang lebih umum, tetapi tidak dapat menemukannya. Saya menulis konverter yang dapat membantu orang lain.
Ini didasarkan pada kenyataan bahwa kita perlu membedakan enam kasus yang berbeda:
Inilah implementasi saya untuk 4 kasus pertama:
contoh:
Saya pikir parameternya mudah diingat.
Semoga ini bisa membantu seseorang.
sumber
Anda dapat menggunakan QuickConverter .
Dengan QuickConverter Anda dapat menulis logika konverter sejajar dengan BindingExpression Anda
Berikut ini adalah konverter BooleanToVisibility terbalik:
Anda dapat menambahkan QuickConverter melalui NuGet. Lihatlah dokumentasi untuk pengaturan. Tautan: https://quickconverter.codeplex.com/
sumber
Tuliskan petobatmu sendiri.
sumber
Versi satu arah sederhana yang dapat digunakan seperti ini:
dapat diimplementasikan seperti ini:
sumber
Konversikan semuanya menjadi semuanya (bool, string, enum, dll):
Contoh XAML:
sumber
Daripada menulis kode Anda sendiri / menciptakan kembali, pertimbangkan untuk menggunakan CalcBinding :
CalcBinding juga cukup berguna untuk banyak skenario lainnya.
sumber
Saya tahu ini tanggal, tetapi, Anda tidak perlu mengimplementasikan kembali apa pun.
Apa yang saya lakukan adalah meniadakan nilai pada properti seperti ini:
....
Dan itu bekerja dengan baik!
Apakah saya melewatkan sesuatu?
sumber