Получение родительского ListBox выбранного индекса как CommandParamater из пункта контекстного меню - PullRequest
0 голосов
/ 25 ноября 2011

Я пытаюсь передать свойство Selected Index списка в качестве параметра команды в пункт контекстного меню, у меня работает привязка команды (спасибо Will @ ElementName Binding из MenuItem в ContextMenu ), но я 'У меня проблемы с моим командным параметром.

<UserControl>
    <ListBox ItemsSource="{Binding myItems}">
        <ListBox.Resources> <!-- The selected item is the item the mouse is over  -->
            <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsMouseOver,RelativeSource={RelativeSource Self}}" 
                     Value="True">
                        <Setter Property="IsSelected" Value="True" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListBox.Resources>

        <ListBox.ItemTemplate>
            <DataTemplate>
                <Button Content="Edit" Grid.Column="4" Grid.Row="0" Tag="{Binding DataContext, ElementName=ProductBacklog}">
                    <Button.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Remove" 
                                Command="{Binding PlacementTarget.Tag.RemoveStoryClickCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
                                CommandParameter="{Binding <!--I NEED TO BIND TO THE LISTBOX-->, Path=SelectedIndex}"/>
                        </ContextMenu>
                    </Button.ContextMenu>
                </Button>
            </DataTemplate>
        </ListBox.ItemTemplate>

    </ListBox>
</UserControl>

1 Ответ

1 голос
/ 25 ноября 2011

Вы можете установить CommandParameter="{Binding }" для передачи текущего элемента данных в этой строке в вашу Команду

Редактировать

Только что заметил, что ваша команда в ContextMenu. ContextMenus не являются частью стандартного дерева визуалов WPF, поэтому привязки не работают одинаково. Чтобы привязать к текущему элементу, используйте следующее:

<MenuItem Header="Remove" 
          Command="{Binding PlacementTarget.Tag.RemoveStoryClickCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
          CommandParameter="{Binding PlacementTarget.DataContext, 
              RelativeSource={RelativeSource FindAncestor, 
              AncestorType={x:Type ContextMenu}}}" />

Это будет привязано к DataContext любого элемента управления, на котором находится ContextMenu, поэтому в этом случае это будет Button.DataContext

...