【发布时间】:2012-06-20 09:10:34
【问题描述】:
我有一个显示字符串值列表的 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 值始终为空。我添加了一个额外的按钮来删除选定的项目以检查我的命令是否有效。该按钮具有完全相同的绑定和通过按钮工作删除项目。该按钮如下所示:
<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);
}
任何想法为什么打开上下文菜单时所选项目为空?可能是列表视图的焦点问题?
【问题讨论】:
-
看看你的输出窗口,我敢打赌你会发现一个绑定错误信息。由于 ContextMenu 是一个新窗口,我不确定它是否可以访问 itemsListView。
标签: wpf listview contextmenu