ItemsControl button click command

10,007

The DataContext of each item in your ItemsControl is the item in the collection the ItemsControl is bound to. If this item contains the Command, your code should work fine.

However, this is not usually the case. Typically there is a ViewModel containing an ObservableCollection of items for the ItemsControl, and the Command to execute. If this is your case, you'll need to change the Source of your binding so it looks for the command in ItemsControl.DataContext, not ItemsControl.Item[X]

<Button Command="{Binding 
    RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, 
    Path=DataContext.MyCommand}" />
Share:
10,007

Related videos on Youtube

user1095239
Author by

user1095239

Updated on June 11, 2022

Comments

  • user1095239
    user1095239 about 2 years

    I need some quick help which is a road blocker for me now. I have Button in ItemsControl and I need to perform some task on Button click. I tried adding Command to Button in ItemsControl DataTemplate but its not working. Can anyone suggest how to proceed further.

    <UserControl.Resources>
        <DataTemplate x:key="mytask">
            <TextBox Grid.Row="5" Grid.Column="2" Text="{Binding Path=PriorNote}" Grid.ColumnSpan="7"  VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,5" Width="505" Foreground="Black"/>
            <StatusBarItem Grid.Row="2" Grid.Column="8" Margin="8,7,7,8" Grid.RowSpan="2">
            <Button x:Name="DetailsButton" Command="{Binding CommandDetailsButtonClick}">
        </DataTemplate>
    </UserControl.Resources>
    
    <Grid>
        <ItemsControl Grid.Row="1" 
                      ItemsSource="{Binding ListStpRules}" 
                      ItemTemplate="{StaticResource myTaskTemplate}" Background="Black"
                      AlternationCount="2" >
        </ItemsControl>
    </Grid>
    

    and in ViewModel I have implemented code for Command. And its not working. Please suggest any solution for me to proceed further

  • isntn
    isntn about 12 years
    Adding to Rachel's good answer, if you want to pass item as parameter, use CommandParameter="{Binding}"...
  • newfurniturey
    newfurniturey almost 12 years
    +1 This worked perfectly for me! I actually needed to bind to a Command in the View and not ViewModel, so I used: {Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=MyCommand} instead =]