Tengo un ListView que muestra una lista de valores de cadena. Quiero agregar una entrada del menú contextual para cada elemento en la lista para eliminar el elemento seleccionado. Mi XAML se ve así:menú contextual para eliminar elementos en 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>
El problema es que el valor CommandParameter
siempre es nula. He agregado un botón adicional para eliminar el elemento seleccionado y comprobar si funciona mi comando. El botón tiene exactamente el mismo enlace y la eliminación de elementos a través del botón funciona. El botón tiene el siguiente aspecto:
<Button Content="Remove selected item"
Command="{Binding RemoveItem}"
CommandParameter="{Binding ElementName=itemsListView, Path=SelectedItem}"/>
El comando es el siguiente:
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);
}
Cualquier idea por qué el elemento seleccionado es nulo cuando se abre el menú contextual? Tal vez un problema de enfoque de la lista?
Tenga una mirada en la ventana de salida, seguro que encontrará un mensaje de error vinculante. Como ContextMenu es una nueva ventana, no estoy seguro de que pueda acceder a itemsListView. –
Eche un vistazo a http://stackoverflow.com/questions/1013558/elementname-binding-from-menuitem-in-contextmenu y http://stackoverflow.com/questions/2617122/wpf-menuitem-command-binding-to -elementname-results-to-system-windows-data-error –