Dave
Dave

Reputation: 8461

How to add Command to ListBox.ItemTemplate

I have a WPF application using MVVM.

This code is from my ResourceDictionary.xaml

  <DataTemplate x:Key="LogListTemplate">
        <ListBox ItemsSource="{Binding LogList, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource HorizontalListBoxItem}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border Style="{StaticResource ErrorBorders}">
                        <StackPanel ToolTip="{Binding Details}" Width="250">
                            <TextBlock Text="{Binding Title}" />
                            <TextBlock Text="{Binding Details}" TextWrapping="Wrap" />
                            <Button Command="{Binding AddToTempDtdFileCommand}" CommandParameter="{Binding Details}" Content="Ignore" />
                        </StackPanel>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </DataTemplate>

When I click on Button, the command does not execute. Testing confirms this is because my Button lives within a ListBox.

My problem is I can't move my button out of the ListBox for 2 reasons.

1. Asthetics/UI (the button has belong with the information)  
2. Binding to the LogList is done from within the ListBox.ItemTemplate  

Does any one have any suggestions?

Upvotes: 3

Views: 3180

Answers (1)

MatthiasG
MatthiasG

Reputation: 4532

If the command is defined in the ViewModel you can reach it by using RelativeSource. RelativeSource can find an ancestor (which is your View) so you can use its DataContext (your ViewModel).

<Button Command="{Binding DataContext.AddToTempDtdFileCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type YourViewClass}}}" CommandParameter="{Binding Details}" Content="Ignore" />

Upvotes: 3

Related Questions