WPF CommandParameter CanExecute denir NULL ilk kez
Bir ItemsControl ve DataTemplate içinde bir Düğmeye bağlı WPF ve Komutlar ile bir sorun haline çalıştırmak. Senaryo oldukça yalındır. Bu ItemsControl nesnelerin listesini bağlıdır, ve bir Düğmeye tıklayarak listedeki her nesneyi kaldırmak mümkün olmak istiyorum. Düğmeye bir Komut çalıştırır ve Komut silme ilgilenir. Bu CommandParameter silmek istiyorum Nesneye bağlıdır. Bu şekilde kullanıcı tıklandığında ne olduğunu biliyorum. Bir kullanıcı sadece kendi "" nesneleri - bu yüzden biraz araştırma yapmam lazım "CanExecute" kullanıcı doğru izinlere sahip olduğunu doğrulamak için Komut Ara. kendi silmek mümkün olmalıdır
Sorun parametre CanExecute geçirilen BOŞ deniyor ilk kez - mantık/komutu devre dışı bırakmak için koşamam. Eğer etkin ve komutu çalıştırmak için bu düğmeyi tıklayın ben her zaman yapmak, ancak CommandParameter doğru geçirilir. Bu CommandParameter karşı bağlayıcı çalışıyor demektir.
Bu ItemsControl ve DataTemplate için XAML bu gibi görünüyor:
<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>
Yani gördüğünüz gibi Yorum nesnelerin bir listesi var. Bu DeleteCommentCommand bu CommandParameter Komut nesneye bağlı olmasını istiyorum.
Sorum şu ki: kimse daha önce bu sorunla karşılaşmış olan var mı? Emrimle çağrılır, ama parametre her zaman ilk kez NULL CanExecute - bu yüzden mi?
Güncelleme:Sorunu biraz daraltmak başardı. Bu CommandParameter veri bağlı olduğunda, bir mesaj çıktı diye boş hata Ayıklama ValueConverter ekledim. Sorun çıkıyor CanExecute yöntemi CommandParameter düğmesine bağlı önce yürütülür. Komut önce CommandParameter ayarlamak için denedim önerdiğin gibi () ama hala çalışmıyor. Kontrol için nasıl bir ipucu.
Update2:Orada bağlama "bitti", böylece yeniden değerlendirme komutu? zorlarım algılamak için herhangi bir yolu var mı Ayrıca birden fazla Düğmeleri (ItemsControl her madde için bir) Command nesnesinin bir örneği aynı bağlama var bu bir sorun olur mu?
Update3:Benim Skydrive'a hata bir yeniden yükledim: http://cid-1a08c11c407c0d8e.skydrive.live.com/self.aspx/Code samples/CommandParameterBinding.zip
CEVAP
Benim görüşüme model üzerinde bir komut bağlamak için çalışırken aynı sorunu yaşıyordum.
Bu göreceli bir kaynak adına göre element ve bunu ifade etmekten çok işe yaradı bağlama kullanmak için değiştirdim. Parametre bağlama değiştirmedi.
Eski Kod:
Command="{Binding DataContext.MyCommand, ElementName=myWindow}"
Yeni Kod:
Command="{Binding DataContext.MyCommand, RelativeSource={RelativeSource AncestorType=Views:MyView}}"
GüncellemeBen ElementName kullanmadan bu sorunla karşılaştık, benim görüşüme model üzerinde bir komut bağlama ediyorum ve düğmenin benim veri içeriği görüntülemek modelim. Bu durumda sadece bir Düğmeye bildiriminde Komut özniteliği (XAML) önce CommandParameter niteliği taşımak zorunda kaldım.
CommandParameter="{Binding Groups}"
Command="{Binding StartCommand}"

Null Coalescing operator benzersiz yol...
Ne zaman bir üye çağırma tanımsız davr...
varolan bir tablo için bir NOT NULL sü...
Nasıl null int int dönüştürmek için...
Transfer kurucu NULL...