Mam ListView, który wyświetla listę wartości łańcuchowych. Chcę dodać pozycję menu kontekstowego dla każdego elementu na liście, aby usunąć wybrany element. Moje XAML wygląda następująco:menu kontekstowe do usuwania elementów w widoku listy
<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>
Problem polega na tym, że wartość CommandParameter
zawsze ma wartość null. Dodałem dodatkowy przycisk, aby usunąć wybrany element, aby sprawdzić, czy moje polecenie działa. Przycisk ma dokładnie to samo wiązanie i usuwanie elementów za pomocą przycisku działa. Przycisk wygląda następująco:
<Button Content="Remove selected item"
Command="{Binding RemoveItem}"
CommandParameter="{Binding ElementName=itemsListView, Path=SelectedItem}"/>
Komenda wygląda następująco:
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);
}
jakieś pomysły dlaczego wybrana pozycja jest zerowa podczas otwierania menu kontekstowego? Może problem z listview?
Zapraszamy do obejrzenia w oknie Output, założę znajdziesz wiążącej komunikat o błędzie. Ponieważ ContextMenu jest nowym oknem, nie jestem pewien, czy może uzyskać dostęp do itemsListView. –
Zobacz http://stackoverflow.com/questions/1013558/elementname-binding-from-menuitem-in-contextmenu i http://stackoverflow.com/questions/2617122/wpf-menuitem-command- bind-to -elementname-results-to-system-windows-data-error –