2012-04-09 66 views
0

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

<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? 
    } 

我在视图模型写了这段代码,但它不触发execute方法

RunCommand = new DelegateCommand<object>(OnRunCommand, CanRunCommand); 

private void OnRunCommand(object obj) 
    { 
     // use the object here... 
    } 

    private bool CanRunCommand(object obj) 
    { 
     return true; 
    } 

让我知道,怎么样我可以处理这种情况吗?任何有关相同的例子将不胜感激。

感谢

回答

1

你混合你的方法......你可以运行一个事件,或者您可以使用一个命令,但没有这么多都在一起。

你想要的是绑定的命令:

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

有信息的多完美的事情,根源在那里?here is one

+0

我希望做更多的上下文菜单的clicke事件。 – rajcool111 2012-04-09 19:49:31

+0

以下方法的任何建议?私人无效MenuItem_Click(对象发件人,RoutedEventArgs e){/ /这里需要做什么? } – rajcool111 2012-04-09 19:50:07

+0

你可以像这样运行Execute方法:((MyModle)DataContext).RunCommand.Execute(); – 2012-04-09 20:37:53

0

谢谢..! 那么,下面的一段代码为我工作。

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> 
+0

仅仅因为你可以通过扔一个开放的油漆来绘制墙壁并不意味着这是做这件事的最好方法。如果我是你,我会查看其他答案,并研究MVVM和Command绑定 – 2015-06-02 17:09:53

相关问题