如何获取上下文菜单单击事件的选定列表视图项

本文关键字:事件 列表 视图 单击 菜单 何获取 获取 上下文 | 更新日期: 2023-09-27 18:30:26

当单击分配给列表视图项目的上下文菜单时,我需要帮助来获取选定的列表视图项目详细信息。

 <ListView.Resources>
    <ContextMenu x:Key="GvRowMenu" ItemsSource="{Binding ContextMenuItems}">
        <ContextMenu.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Image  Source="{Binding IconPath}"></Image>
                    <TextBlock  Text="{Binding Name}"></TextBlock>
                    <MenuItem 
                        Click="MenuItem_Click"
                        CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=DataContext.RunCommand}" />

这是一个点击事件代码

private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        //what needs to de here?
    }

我在视图模型中编写了这段代码,但它不会在执行方法上触发

RunCommand = new DelegateCommand<object>(OnRunCommand, CanRunCommand);
private void OnRunCommand(object obj)
    {
        // use the object here...
    }
    private bool CanRunCommand(object obj)
    {
        return true;
    }

让我知道,我该如何处理这种情况。任何与此相关的示例将不胜感激。

谢谢

如何获取上下文菜单单击事件的选定列表视图项

你正在混合你的方法...您可以运行事件,也可以使用命令,但不能同时运行两者。

你想要的是绑定命令:

<MenuItem Command="{Binding DataContext.RunCommand}" />

那里有许多奇妙的信息来源......这是其一。

谢谢..!好吧,下面的一段代码对我有用。

private void MenuItem_Click(object sender, RoutedEventArgs e)
{
   MenuItem menuItem = (MenuItem)e.Source;
   ContextMenu contextMenu = menuItem.CommandParameter as ContextMenu;
   ListViewItem item = (ListViewItem)contextMenu.PlacementTarget;
   var x = ((myViewModel)(item.Content)).myModel;
   //'x' gives all required data of list view item
}

这是我的 XAML

<ListView.Resources>
   <ContextMenu x:Key="GvRowMenu" ItemsSource="{Binding ContextMenuItems}">
      <ContextMenu.ItemTemplate>
         <DataTemplate>
            <StackPanel Orientation="Horizontal">
               <Image  Source="{Binding ImagePath}"/>
               <TextBlock  Text="{Binding Name}"/>
               <MenuItem Click="MenuItem_Click" 
                         CommandParameter="{Binding 
                                 RelativeSource={RelativeSource 
                                 AncestorType={x:Type ContextMenu}}}"/>
            </StackPanel>
         </DataTemplate>
      </ContextMenu.ItemTemplate>
   </ContextMenu>
</ListView.Resources>