У меня есть ListView, который отображает список строковых значений. Я хочу добавить запись контекстного меню для каждого элемента в списке, чтобы удалить выбранный элемент. Моя XAML выглядит следующим образом:контекстное меню для удаления элементов в listview
<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);
}
Любые идеи, почему выбранный элемент является нулевым при открытии контекстного меню? Может быть, проблема фокуса в списке?
Посмотрите в окне Output, я уверен, вы увидите сообщение об ошибке связывания. Поскольку ContextMenu - это новое окно, я не уверен, что он может получить доступ к элементамListView. –
Осмотрите http://stackoverflow.com/questions/1013558/elementname-binding-from-menuitem-in-contextmenu и http://stackoverflow.com/questions/2617122/wpf-menuitem-command-binding-to -elementname-results-to-system-windows-data-error –