Привязать к DataContext ItemsControl из ItemTemplate - PullRequest
23 голосов
/ 02 октября 2009

У меня есть ItemsControl, для которого 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's DataContext?

1 Ответ

43 голосов
/ 03 октября 2009

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

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

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

...