2016-03-25 1 views
0

Ich verfüge über ein Kontextmenü mit 1 Menüelement. Dieser Menüeintrag ist an eine ObservableCollection für die Item-Quelle gebunden.Name (oder Index) des ausgewählten Menüelements aus dem Kontextmenü abrufen, das dynamisch über ItemsSource generiert wurde, das an eine ObservableCollection gebunden ist.

  <ListView.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="Example Menu Item" 
          Command="{Binding Path=DataContext.ExampleCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListView}}" 
          ItemsSource="{Binding ObservableItems}"> 
       </MenuItem> 
      </ContextMenu> 
     </ListView.ContextMenu> 

Wie bekomme ich den Namen (oder Index) des ausgewählten Menüelements. Das Problem ist, dass ich keinen Befehl an jeden einzelnen Menüeintrag binden kann, da sie dynamisch generiert werden.

Zum Beispiel wie würde ich wissen, auf welches Element geklickt wurde, wie in der Abbildung unten zu sehen?

enter image description here

Jede Hilfe ist sehr geschätzt. Vielen Dank.

Antwort

3

Sie können immer noch binden Command und CommandParameter pro Stück für Listen dynamisch generierten, aber Sie müssen ItemContainerStyle

<ContextMenu> 
    <MenuItem Header="Example Menu Item" ItemsSource="{Binding ObservableItems}"> 
     <MenuItem.ItemContainerStyle> 
      <Style TargetType="{x:Type MenuItem}"> 
       <Setter Property="Command" Value="{Binding Path=DataContext.ExampleCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListView}}"/> 
       <Setter Property="CommandParameter" Value="{Binding}"/> 
      </Style> 
     </MenuItem.ItemContainerStyle> 
    </MenuItem> 
</ContextMenu> 

in diesem Beispiel verwenden CommandParameter, die Sie ExampleCommand Befehl als Parameter übergeben wird, wird ein Element sein, in Ihre Sammlung (aktuelle DataContext der Kinder Artikel)

EDIT

Um den Index zu erhalten, können Sie ein Paar ItemsControl Eigenschaften verwenden: AlternationCount und AlternationIndex. Sie setzen AlternationCount zu Anzahl der Elemente in Ihrer Sammlung und übergeben AlternationIndex auf Ihren Befehl

<MenuItem Header="Example Menu Item" ItemsSource="{Binding ObservableItems}" AlternationCount="{Binding ObservableItems.Count}"> 
    <MenuItem.ItemContainerStyle> 
     <Style TargetType="{x:Type MenuItem}"> 
     <Setter Property="Command" Value="{Binding ...}"/> 
     <Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Self}, Path=(ItemsControl.AlternationIndex)}"/> 
     </Style> 
    </MenuItem.ItemContainerStyle> 
</MenuItem> 
+0

Danke für die Antwort. Es funktionierte :) – HaloMediaz

+0

wäre es möglich, den ausgewählten Index zu erhalten, anstatt die observablecollection Element? – HaloMediaz

+1

Wenn Sie Item und Collection Index von dort bekommen haben (es ist in der gleichen 'DataContext') – dkozl

Verwandte Themen