2016-06-20 21 views
1

Ich arbeite an WPF. Ich habe ListBox und ich füge ListBox Items programmatisch über "ObservableCollection" hinzu, wie ich zur Laufzeit hinzufügen und entfernen muss. Ich habe ContextMenu auf ListBoxItems. Jetzt möchte ich das ausgewählte Element durch Klicken auf das Kontextmenü aufrufen. Hier ist mein Code:Get ausgewähltes Element der ListBox mit ContextMenu

CS-

ObservableCollection<string> MyItems = null; 

    public MessageTrcr() 
    { 
     InitializeComponent(); 

     MyItems = new ObservableCollection<string>(); 

     listofConnectedItems.ItemsSource = MyItems; 

     CreateListItem("Sandeep"); 
     CreateListItem("Gopi"); 
    } 

    public void CreateListItem(String ItemName) 
    { 
     MyItems.Add(ItemName); 
    } 
    private void MenuItemStart_Click(object sender, RoutedEventArgs e) 
    { 
     // What should I write here to get selected Item 
    } 

und XAML

<Grid> 
    <ListBox x:Name="listofConnectedItems" Grid.Column="0" Grid.Row="0" ItemsSource="{Binding MyItems}" > 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="{x:Type ListBoxItem}"> 
       <Setter Property="Padding" Value="10"> 
       </Setter> 
      </Style> 
     </ListBox.ItemContainerStyle> 
     <ListBox.ContextMenu> 
      <ContextMenu x:Name="contextMenu"> 
       <MenuItem Header="_Start" Click="MenuItemStart_Click" /> 
       <MenuItem Header="Sto_p" /> 
       <MenuItem Header="_Clear" /> 
      </ContextMenu> 
     </ListBox.ContextMenu> 
    </ListBox> 
</Grid> 

Hier der Screenshot ist.

enter image description here

Wenn ich nach rechts auf Gopi klicken und klicken Sie auf Start I "Gopi" wollen in MenuItemStart_Click

Nun, was soll ich in "MenuItemStart_Click" Ereignis schreiben das ausgewählte Element zu erhalten. Ich habe versucht, e.OriginalSource as MenuItem und sender as MenuItem, aber keinen Nutzen. Kann jemand bitte mich durchmachen. Vielen Dank im Voraus

+1

listofConnectedItems.SelectedItem? das sollte es dir geben – adminSoftDK

+0

@adminSoftDK Danke dude. Es hat perfekt funktioniert. Ich verstehe nicht, wie ich es vermisst habe. Jedenfalls danke :) – Gopi

Antwort

0

Warum nicht die ausgewählte Eigenschaft auch binden?

<ListBox 
    SelectedItem = {Binding SelectedItemProperty, Mode="TwoWay"} 
    x:Name="listofConnectedItems" 
    Grid.Column="0" Grid.Row="0" 
    ItemsSource="{Binding MyItems}" > 

dann in Ihrem Code neben Ihrem beobachtbaren Sammlung

public string SelectedItemProperty {get; set;} 
+0

Ich überprüfte Ihren Code, aber es zeigt nichts. Wie @adminSoftDK sagte "listofConnectedItems.SelectedItem" funktioniert. Anyway Danke :) – Gopi

+0

@Gopi Ich versichere Ihnen, dass dies der richtige Weg ist, es zu tun. Der Zugriff auf Objekte über den Namen im Behind-Code ist nicht pflegbar. Was passiert, wenn Sie zu einer MVVM-Struktur wechseln? lol Irgendwie, viel Glück damit. –

Verwandte Themen