Bagaimana cara mengikat visibilitas tombol ke nilai bool di ViewModel saya?
<Button Height="50" Width="50" Style="{StaticResource MyButtonStyle}"
Command="{Binding SmallDisp}" CommandParameter="{Binding}" Cursor="Hand"
Visibility="{Binding Path=AdvancedFormat}" />
c#
wpf
xaml
data-binding
raym0nd
sumber
sumber
Jawaban:
Dengan asumsi
AdvancedFormat
adalah abool
, Anda perlu mendeklarasikan dan menggunakanBooleanToVisibilityConverter
:Perhatikan yang ditambahkan
Converter={StaticResource BoolToVis}
.Ini adalah pola yang sangat umum saat bekerja dengan MVVM. Secara teori, Anda dapat melakukan konversi sendiri pada properti ViewModel (yaitu hanya membuat properti itu sendiri dari tipe
Visibility
) meskipun saya lebih suka tidak melakukannya, karena sekarang Anda mengotak - atik pemisahan kekhawatiran. Visibilitas item harus benar-benar sesuai dengan View.sumber
Ada cara ketiga yang tidak memerlukan konverter atau perubahan pada model tampilan Anda: gunakan gaya:
Saya cenderung lebih suka teknik ini karena saya menggunakannya dalam banyak kasus di mana yang saya ikat bukanlah boolean - misalnya menampilkan elemen hanya jika
DataContext
bukan null, atau mengimplementasikan tampilan multi-status di mana tata letak yang berbeda muncul berdasarkan pengaturan enum dalam model tampilan.sumber
TextBlock
yangTextWrapping="Wrap"
diberikan. Sekarang properti pembungkus tidak disetel di dalamnya.2 cara konversi di c # dari boolean ke visibilitas
sumber
Umumnya ada dua cara untuk melakukannya, kelas konverter atau properti di Viewmodel yang pada dasarnya mengonversi nilai untuk Anda.
Saya cenderung menggunakan pendekatan properti jika itu adalah konversi satu kali. Jika Anda ingin menggunakannya kembali, gunakan konverter. Di bawah ini, temukan contoh konverternya:
Metode properti ViewModel hanya akan memeriksa nilai properti boolean, dan mengembalikan visibilitas berdasarkan itu. Pastikan untuk mengimplementasikan INotifyPropertyChanged dan memanggilnya di properti Boolean dan Visibility agar diperbarui dengan benar.
sumber
Ini dapat dicapai dengan cara yang sangat sederhana 1. Tuliskan ini dalam tampilan.
Berikut ini adalah properti Boolean yang menyimpan nilai benar / salah. Berikut ini adalah potongan kodenya. Dalam contoh saya, properti ini berada di kelas UserNote.
Ini adalah cara properti IsHide mendapatkan nilainya.
sumber
Dalam penglihatan:
Model dalam tampilan:
Anda harus memiliki acara yang diubah properti
Beginilah cara mereka menggunakan Model-view-viewmodel
Tetapi karena Anda ingin mengikatnya ke boolean, Anda memerlukan beberapa konverter. Cara lain adalah dengan menyetel boolean di luar dan saat tombol itu diklik, setel property_advancedFormat ke visibilitas yang Anda inginkan.
sumber
private Visibility _advancedFormat = Visibility.visible
Ini bekerja dengan baik karenaUWP
terima kasih.Sejak Windows 10 15063 ke atas
Sejak Windows 10 membangun 15063, ada fitur baru yang disebut "Konversi Visibilitas Implisit" yang mengikat Visibilitas ke nilai bool secara native - Tidak perlu lagi menggunakan konverter.
(Lihat https://social.technet.microsoft.com/wiki/contents/articles/34846.uwp-compiled-binding-windows-10-anniversary-update.aspx#Implicit_Visibility_conversion ).
Kode saya (yang menganggap bahwa MVVM digunakan, dan Templat 10 juga):
sumber