Saya mengalami masalah dengan WPF dan Perintah yang terikat ke Tombol di dalam DataTemplate dari ItemsControl. Skenarionya cukup lurus ke depan. ItemsControl terikat ke daftar objek, dan saya ingin dapat menghapus setiap objek dalam daftar dengan mengklik sebuah Tombol. Tombol menjalankan Perintah, dan Perintah menangani penghapusan. CommandParameter terikat ke Objek yang ingin saya hapus. Dengan cara itu saya tahu apa yang diklik pengguna. Seorang pengguna seharusnya hanya dapat menghapus objek "sendiri" mereka - jadi saya perlu melakukan beberapa pemeriksaan dalam panggilan "CanExecute" dari Perintah untuk memverifikasi bahwa pengguna memiliki izin yang tepat.
Masalahnya adalah bahwa parameter yang diteruskan ke CanExecute adalah NULL saat pertama kali dipanggil - jadi saya tidak dapat menjalankan logika untuk mengaktifkan / menonaktifkan perintah. Namun, jika saya membuatnya selalu diaktifkan, lalu mengklik tombol untuk menjalankan perintah, CommandParameter akan diteruskan dengan benar. Jadi itu berarti pengikatan terhadap CommandParameter berfungsi.
XAML untuk ItemsControl dan DataTemplate terlihat seperti ini:
<ItemsControl
x:Name="commentsList"
ItemsSource="{Binding Path=SharedDataItemPM.Comments}"
Width="Auto" Height="Auto">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button
Content="Delete"
FontSize="10"
Command="{Binding Path=DataContext.DeleteCommentCommand, ElementName=commentsList}"
CommandParameter="{Binding}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Jadi seperti yang Anda lihat, saya memiliki daftar objek Komentar. Saya ingin CommandParameter dari DeleteCommentCommand terikat ke objek Command.
Jadi saya kira pertanyaan saya adalah: apakah ada yang pernah mengalami masalah ini sebelumnya? CanExecute dipanggil di Command saya, tetapi parameternya selalu NULL saat pertama kali - mengapa demikian?
Pembaruan: Saya dapat mempersempit masalah sedikit. Saya menambahkan Debug ValueConverter kosong sehingga saya bisa mengeluarkan pesan ketika CommandParameter terikat data. Ternyata masalahnya adalah metode CanExecute dijalankan sebelum CommandParameter terikat ke tombol. Saya telah mencoba mengatur CommandParameter sebelum Command (seperti yang disarankan) - tetapi masih tidak berhasil. Ada tips tentang cara mengontrolnya.
Pembaruan2: Apakah ada cara untuk mendeteksi kapan pengikatan "selesai", sehingga saya dapat memaksa evaluasi ulang perintah? Juga - apakah masalah saya memiliki beberapa Tombol (satu untuk setiap item di ItemsControl) yang terikat ke contoh yang sama dari objek-Perintah?
Pembaruan3: Saya telah mengunggah reproduksi bug ke SkyDrive saya: http://cid-1a08c11c407c0d8e.skydrive.live.com/self.aspx/Code%20samples/CommandParameterBinding.zip