2009-10-02 21 views
21

ItemTemplate DataTemplate için bir düğme içeren bir ItemsControl var. Düğme üzerindeki Komutu, ItemTemplate'ı değil, ItemsControl'ün DataContext'indeki bir Komut'a bağlamayı istiyorum. Ben çözüm RelativeSource kullanarak ilgisi var düşünüyorum, ama benim girişimleri defa başarısız:Öğelerden birinden ItemsControl'ın DataContext nesnesine bağlama

<ItemsControl ItemsSource="{Binding Games}">   
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button Command="{Binding Path=GameSelectedCommand, Source={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}" 
        CommandParameter="{Binding}" 
        Style="{StaticResource MenuButtonStyle}" 
        Content="{Binding Name}"/>  
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

nasıl Düğme itemscontrol en DataContext nesnesinin GameSelectedCommand bağlanmasına alabilirim?

cevap

40

Bağlamanın kaynağını, ItemsControl'un kendisine ayarlarsınız.

Command="{Binding DataContext.GameSelectedCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}" 

Bunu nasıl bilirdin: Bu nedenle, ItemsControl ait DataContext KQUEUE gerekir? Uygulamayı çalıştırırken hata ayıklama çıkış penceresine bir göz atın. "ItemsControl" türünde "GameSelectedCommand özelliğini 'çözemezsiniz" satırında bir mesaj görürsünüz.

+1

Cevabınız için teşekkürler, ama bunu gerçekten denedim. Aşağıdaki DataBinding hata var: System.Windows.Data Hata: 39: BindingExpression yolu hatası: 'DataContext' özelliği 'object' '' RelativeSource '(HashCode = 50668565)' bulunamadı. BindingExpression: Yol = DataContext.GameSelectedCommand; DataItem = 'RelativeSource' (HashCode = 50668565); hedef eleman 'Button' (Name = ''); hedef özelliği 'Komut' (tip 'ICommand') 'dir Aslında ItemsControl'ü bulmanın kendisinin bulamadığından emin değilim –

+3

Ha! Üzgünüz, RelativeSource = "..." yerine Source = "..." aldığınız gerçeğini kaçırdım. Güncellenmiş cevabımı görün. –

+0

bu kadar, teşekkürler. –

İlgili konular