Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bind to ItemsControl's DataContext from inside an ItemTemplate

Tags:

I have an ItemsControl whose for the ItemTemplate DataTemplate contains a Button. I want the Command on the button to bind to a Command on the DataContext of the ItemsControl, not the ItemTemplate. I think the solution has to do with using RelativeSource, but my attempts so far have failed:

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

How can I get the Button to bind to the GameSelectedCommand of the ItemsControl's DataContext object?

like image 392
Mark Heath Avatar asked Oct 02 '09 19:10

Mark Heath


1 Answers

You're setting the source of the binding to the ItemsControl itself. Therefore, you'll need to dereference the DataContext of the ItemsControl:

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

How would you have known this? Take a look at your debug output window when running the app. You'll see a message along the lines of "Cannot resolve property 'GameSelectedCommand' on type 'ItemsControl'".

like image 89
Kent Boogaart Avatar answered Oct 02 '22 07:10

Kent Boogaart