1

WPF 菜单项的处理程序方法如何确定单击了 ListView 中的哪个项目?

编辑: 菜单是为 ListView 设置的上下文菜单。问题是在选择上下文菜单项时查找单击了哪个 ListView 项。

4

3 回答 3

2

签出 ContextMenu.PlacementTarget,您可以在可视化树 (VisualTreeHelper.GetParent) 上查找该对象,直到找到 ListViewItem。

于 2009-07-03T15:00:36.590 回答
0

以防万一其他人有这个问题,我最终得到了类似的结果:

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...
}
于 2009-12-08T23:15:29.907 回答
0

如果您的每个数据项都有一个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) ...
}
于 2009-07-03T15:09:43.510 回答