问题
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?
回答1:
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'".
来源:https://stackoverflow.com/questions/1511516/bind-to-itemscontrols-datacontext-from-inside-an-itemtemplate