WPF 菜单项的处理程序方法如何确定单击了 ListView 中的哪个项目?
编辑: 菜单是为 ListView 设置的上下文菜单。问题是在选择上下文菜单项时查找单击了哪个 ListView 项。
签出 ContextMenu.PlacementTarget,您可以在可视化树 (VisualTreeHelper.GetParent) 上查找该对象,直到找到 ListViewItem。
以防万一其他人有这个问题,我最终得到了类似的结果:
private void ListViewItems_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var frameworkElement = e.OriginalSource as FrameworkElement;
var item = frameworkElement.DataContext as MyDataItem;
if(null == item)
{
return;
}
// TODO: Use item here...
}
如果您的每个数据项都有一个IsSelected
绑定到该属性的ListViewItem.IsSelected
属性,那么您只需遍历数据以查找选定的数据项:
<ListView ItemsSource="{Binding Items}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
在您的代码中:
public ICollection<DataItem> Items
{
get { return _items; }
}
public IEnumerable<DataItem> SelectedItems
{
get
{
foreach (var item in Items)
{
if (item.IsSelected)
yield return item;
}
}
}
private void DoSomethingWithSelectedItems()
{
foreach (var item in SelectedItems) ...
}