wpf - 用于删除 ListView 中的项目的上下文菜单

标签 wpf listview contextmenu

我有一个显示字符串值列表的 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值始终为空。我添加了一个额外的按钮来删除选定的项目以检查我的命令是否有效。该按钮具有完全相同的绑定(bind)和通过按钮工作删除项目。该按钮如下所示:
<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);  

}

任何想法为什么打开上下文菜单时所选项目为空?也许是 ListView 的焦点问题?

最佳答案

HB是正确的。但您也可以使用 RelativeSource 绑定(bind)

    <ListView x:Name="itemsListView" ItemsSource="{Binding MyItems}">
        <ListView.ContextMenu>
            <ContextMenu>
                <MenuItem Header="Remove"
            Command="{Binding RemoveItem}"
            CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem}" />
            </ContextMenu>
        </ListView.ContextMenu>
    </ListView>

关于wpf - 用于删除 ListView 中的项目的上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11082162/

相关文章:

JavaFX ChoiceBox 上下文菜单位置

javascript - 如何触发元素上的浏览器上下文菜单。 (就像用户右击一样)

c# - 图片边框控制换行问题

c# - 日历控件的点击事件

c# - WPF 的流程图控件

java - Android 使用 RecyclerView 滚动时列表可以容纳多少个项目

c# - 在 WPF 中调用调度程序时出现问题

android - 将 ListView 项转换为单个位图图像

android - 滚动时的 ListView 填充

vbscript - 创建简单的自定义上下文菜单命令 - 如何运行使用右键单击的文件路径/名称的 VB 脚本?