Ich habe eine ListView, die eine Liste von String-Werten anzeigt. Ich möchte für jedes Element in der Liste einen Kontextmenüeintrag hinzufügen, um das ausgewählte Element zu entfernen. Meine XAML sieht wie folgt aus:Kontextmenü zum Entfernen von Elementen in der Listenansicht
<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>
Das Problem ist, dass der CommandParameter
Wert immer null ist. Ich habe eine zusätzliche Schaltfläche hinzugefügt, um das ausgewählte Element zu entfernen, um zu überprüfen, ob mein Befehl funktioniert. Die Schaltfläche hat genau die gleiche Bindung und das Entfernen von Elementen über die Schaltfläche funktioniert. Die Schaltfläche sieht wie folgt aus:
<Button Content="Remove selected item"
Command="{Binding RemoveItem}"
CommandParameter="{Binding ElementName=itemsListView, Path=SelectedItem}"/>
Der Befehl sieht wie folgt aus:
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);
}
Irgendwelche Ideen, warum das ausgewählte Element null ist, wenn das Kontextmenü zu öffnen? Vielleicht ein Schwerpunktproblem der Listview?
Werfen Sie einen Blick in Ihre Ausgabefenster verwenden können, ich wette, Sie werden eine verbindliche Fehlermeldung finden. Da ein ContextMenu ein neues Fenster ist, bin ich mir nicht sicher, ob es auf itemsListView zugreifen kann. –
Schauen Sie sich http://StackOverflow.com/Questions/1013558/elementname-binding-from-menuitem-in-contextmenu und http://StackOverflow.com/questions/2617122/wpf-menuitem-command-binding-to an -elementname-results-to-system-windows-data-error –