SORU
2 Aralık 2008, Salı


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
28 EKİM 2010, PERŞEMBE


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}"

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Adams

    Bryan Adams

    30 Mart 2006
  • Kap Slap

    Kap Slap

    8 Mart 2010
  • Vladimir Jenko

    Vladimir Jen

    1 Mart 2010