Подтвердить что ты не робот

Связывание с ItemsControl DataContext изнутри ItemTemplate

У меня есть ItemControl, для элемента ItemTemplate DataTemplate содержится кнопка. Я хочу, чтобы команда на кнопке привязывалась к команде в DataContext элемента ItemsControl, а не к ItemTemplate. Я думаю, что решение связано с использованием RelativeSource, но мои попытки до сих пор не удалось:

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

Как я могу заставить Button привязать к GameSelectedCommand объекта ItemsControl DataContext?

4b9b3361

Ответ 1

Вы устанавливаете источник привязки к самому ItemsControl. Поэтому вам нужно разыменовать DataContext ItemsControl:

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

Как бы вы это узнали? Взгляните на окно вывода отладки при запуске приложения. Вы увидите сообщение в строке "Невозможно разрешить свойство GameSelectedCommand" в типе "ItemsControl".