ListBox.SelectedIndex в обработчике событий ContextMenu - PullRequest
2 голосов
/ 13 февраля 2012

У меня есть список с контекстным меню.Как получить значение свойства SelectedIndex (SelectedItem) в обработчике событий щелчка ContextMenuItem?В настоящее время в событиях Edit_Click и Delete_CLick значение CarsList.SelectedIndex всегда равно -1.

Здесь мой ListBox в XAML:

           <ListBox Name="CarsList" Style="{StaticResource ListBoxStyle}" Margin="26,0,26,0" Height="380" >
                <toolkit:ContextMenuService.ContextMenu>
                    <toolkit:ContextMenu Name="ContextMenu" >
                        <toolkit:MenuItem Name="Edit" Header="Edit" Click="Edit_Click"/>
                        <toolkit:MenuItem Name="Delete"  Header="Delete" Click="Delete_Click"/>
                    </toolkit:ContextMenu>
                </toolkit:ContextMenuService.ContextMenu>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding CarName}" TextTrimming="WordEllipsis" Foreground="Black" FontSize="24" Width="428"/>
                            <TextBlock Text="{Binding VIN}" TextWrapping="Wrap" Foreground="Gray" FontSize="20" Width="428"/>
                            <TextBlock Text="{Binding Date}" TextWrapping="Wrap" Foreground="Gray" FontSize="20" Width="428"/>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

Спасибо.

Ответы [ 2 ]

9 голосов
/ 13 февраля 2012

Прежде всего вы присвоили Context Menu элементу управления ListBox, а не каждому элементу.Итак, вместо этого переместите блок <toolkit:ContextMenuService.ContextMenu> в StackPanel.

Есть несколько способов получить элемент, по которому был выполнен щелчок контекстного меню:

В обработчике Click у вас есть sender объект (это MenuItem, я думаю)

Приведите его к MenuItem и посмотрите на DataContext этого.Это будет элемент коллекции, который вы добавили в список.Таким образом, вы можете найти индекс по:

int selectedIndex = YourListBoxItemCollection.IndexOf((sender as MenuItem).DataContext)

, где YourListBoxItemCollection - это то, что вы присваиваете CarsList.ItemsSource

0 голосов
/ 13 февраля 2012

Похоже, вам нужно использовать ListPicker (http://silverlight.codeplex.com/releases/view/75888) с SelectedItems. ИЛИ Добавить некоторый флаг выбора элемента ...

...