Saya memiliki di Menu
mana masing-masing MenuItem
dalam hierarki memiliki Command
properti yang ditetapkan ke yang RoutedCommand
telah saya tentukan. Yang terkait CommandBinding
memberikan panggilan balik untuk evaluasi CanExecute
yang mengontrol keadaan masing-masing yang diaktifkan MenuItem
.
Ini hampir berhasil. Item menu pada awalnya muncul dengan status diaktifkan dan dinonaktifkan yang benar. Namun ketika data bahwa CanExecute
panggilan balik saya menggunakan perubahan, saya memerlukan perintah untuk meminta kembali hasil dari panggilan balik saya agar keadaan baru ini tercermin di UI.
Tampaknya tidak ada metode publik untuk RoutedCommand
atau CommandBinding
untuk ini.
Perhatikan bahwa callback digunakan lagi ketika saya mengklik atau mengetik ke kontrol (saya kira itu dipicu pada input karena mouse-over tidak menyebabkan penyegaran).
sumber
Untuk siapa saja yang menemukan ini nanti; Jika Anda menggunakan MVVM dan Prism, maka
DelegateCommand
implementasi PrismICommand
menyediakan.RaiseCanExecuteChanged()
metode untuk melakukan ini.sumber
RaiseCanExecuteChanged()
panggilan sederhanaCommandManager.InvalidateRequerySuggested()
.((RelayCommand)MyCommand).RaiseCanExecuteChanged();
bekerja untuk saya, menggunakan GalaSoft.MvvmLight.Command - NAMUN setelah berubah menjadiCommandWPF
, itu bekerja tanpa perlu memanggil apa pun. Terima kasih @ fuchs777Saya tidak bisa menggunakan
CommandManager.InvalidateRequerySuggested();
karena saya mendapatkan kinerja yang baik.Saya telah menggunakan perintah Delegating MVVM Helper , yang terlihat seperti di bawah ini (saya telah men-tweak sedikit untuk req kami). Anda harus menelepon
command.RaiseCanExecuteChanged()
dari VMsumber
Jika Anda telah menggulir kelas Anda sendiri yang mengimplementasikannya,
ICommand
Anda dapat kehilangan banyak pembaruan status otomatis yang memaksa Anda untuk mengandalkan penyegaran manual lebih dari yang seharusnya diperlukan. Itu juga bisa pecahInvalidateRequerySuggested()
. Masalahnya adalahICommand
implementasi sederhana gagal untuk menghubungkan perintah baru keCommandManager
.Solusinya adalah menggunakan yang berikut ini:
Dengan cara ini pelanggan melampirkan
CommandManager
daripada kelas Anda dan dapat berpartisipasi dengan baik dalam perubahan status perintah.sumber
Saya telah menerapkan solusi untuk menangani ketergantungan properti pada perintah, di sini tautan https://stackoverflow.com/a/30394333/1716620
terima kasih untuk itu Anda akan akhirnya memiliki perintah seperti ini:
sumber
Inilah yang berhasil bagi saya: Letakkan CanExecute di depan Command di XAML.
sumber