代码之家  ›  专栏  ›  技术社区  ›  Thomas Bratt

WPF-如何在菜单处理程序方法中找到单击的项?

  •  1
  • Thomas Bratt  · 技术社区  · 17 年前

    WPF菜单项的handler方法如何确定单击了ListView中的哪个项?

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

    3 回复  |  直到 17 年前
        1
  •  2
  •   Martin Moser    17 年前

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

        2
  •  0
  •   Thomas Bratt    16 年前

    万一其他人有这个问题,我最后会说:

    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...
    }
    
        3
  •  0
  •   Tim Cooper    15 年前

    如果每个数据项都有 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) ...
    }