私は文字列値のリストを表示する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である理由を任意のアイデア?たぶん、リストビューの焦点問題?
は、私はあなたがバインディングエラーメッセージを見つけることができます賭け、あなたの出力ウィンドウで見てください。 ContextMenuは新しいウィンドウなので、itemsListViewにアクセスできるかどうかはわかりません。 –
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 –