3

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?

Dave
  • 8,163
  • 11
  • 67
  • 103

1 Answers1

3

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" />
MatthiasG
  • 4,434
  • 3
  • 27
  • 47