У меня есть ListView, который отображает список строковых значений. Я хочу добавить запись в контекстное меню для каждого элемента в списке, чтобы удалить выбранный элемент. Мой XAML выглядит так:
<ListView x:Name="itemsListView" ItemsSource="{Binding MyItems}">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove"
Command="{Binding RemoveItem}"
CommandParameter="{Binding ElementName=itemsListView, Path=SelectedItem}" />
</ContextMenu>
</ListView.ContextMenu>
</ListView>
Проблема в том, что значение CommandParameter
всегда равно нулю. Я добавил дополнительную кнопку для удаления выбранного элемента, чтобы проверить, работает ли моя команда. Кнопка имеет точно такую же привязку и удаление элементов через кнопку работает. Кнопка выглядит так:
<Button Content="Remove selected item"
Command="{Binding RemoveItem}"
CommandParameter="{Binding ElementName=itemsListView, Path=SelectedItem}"/>
Команда выглядит так:
private ICommand _removeItem;
public ICommand RemoveItem
{
get { return _removeItem ?? (_removeItem = new RelayCommand(p => RemoveItemCommand((string)p))); }
}
private void RemoveItemCommand(string item)
{
if(!string.IsNullOrEmpty(item))
MyItems.Remove(item);
}
Любые идеи, почему выбранный элемент имеет значение null при открытии контекстного меню? Может быть, проблема с фокусом списка?