2016-03-25 48 views
0

bağlı ItemsSource yoluyla oluşturulan içerik menüsünden, seçilen menü öğesinin adını (veya dizin) alın. Bu menü öğesi, itemssource için bir ObservableCollection'a bağlanır.dinamik Ben 1 menü öğesini içeren bir bağlam menüsü bir ObservableCollection

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

Seçilmiş olan menü öğesinin adını (veya dizinini) nasıl alırım. Sorun, dinamik olarak oluşturuldukları için her bir menü öğesine bir komutu bağlayamıyorum. Aşağıdaki resimde görüldüğü gibi Örneğin

nasıl, hangi madde tıklandığı bilemez?

enter image description here

Herhangi bir yardım

çok takdir edilmektedir. Teşekkürler.

cevap

3

Hala Command bağlamak ve dinamik olarak oluşturulmuş listeler için ürün başına CommandParameter ancak bir öğe olacak, ExampleCommand komut parametresi olarak size geçirilen bu örnekte CommandParameter, içinde 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> 

kullanmak gerekir edebilirsiniz koleksiyonunuzu (çocuk öğesinin geçerli DataContext)

DÜZENLEME

Dizini almak için ItemsControl özelliklerinden birini kullanabilirsiniz: AlternationCount ve AlternationIndex. Sen cevap için

<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

Teşekkür koleksiyonunuzu öğelerin sayısına AlternationCount ayarlayın ve komuta AlternationIndex geçmektedir. Çalıştırılan :) – HaloMediaz

+0

, seçili indeksi, gözlemlenebilir koleksiyon öğesi yerine almak mümkün olurdu? – HaloMediaz

+1

Eğer öğeniz ve koleksiyonunuz varsa, indeksi (aynı "DataContext") dizinindeyse – dkozl