文字列値のリストを表示する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
値が常にnullであるということです。コマンドが機能するかどうかを確認するために、選択したアイテムを削除するボタンを追加しました。ボタンにはまったく同じバインディングがあり、ボタンを介したアイテムの削除は機能します。ボタンは次のようになります。
<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になる理由はありますか?たぶんリストビューの焦点の問題?