2012-04-09 2 views
0

Мне нужна помощь, чтобы получить информацию о деталях выбранного списка, когда нажата контекстное меню, назначенное для элементов списка.Как получить выбранный элемент списка списка для контекстного меню click event

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

Позвольте мне знать, как могу ли я справиться с этой ситуацией. Любые примеры, связанные с этим, будут оценены.

Благодаря

ответ

1

вы смесительные вам методы ... вы можете запустить событие или вы можете использовать команду, но не так много, и другое вместе.

, что вы хотите, чтобы связать команду:

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

Есть много Wonderfull источников информации там ... here is one.

+0

Я хочу сделать больше на clicke события контекстного меню. – rajcool111

+0

любой совет для ниже метода? private void MenuItem_Click (отправитель объекта, RoutedEventArgs e) {// что нужно делать здесь? } – rajcool111

+0

вы можете запустить метод Execute вроде этого: ((MyModle) DataContext) .RunCommand.Execute(); –

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 binding –