2016-06-20 6 views
1

Я работаю над WPF. У меня есть ListBox, и я добавляю элементы ListBox программно через «ObservableCollection», так как я должен добавлять и удалять во время выполнения. У меня есть ContextMenu на ListBoxItems. Теперь я хочу получить выбранный элемент, нажав контекстное меню. Вот мой код:Получить выбранный элемент ListBox с помощью 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 
    } 

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

Вот скриншот.

enter image description here

Когда я правой кнопкой мыши на Гопи и нажмите Start я хочу «Гопи» в MenuItemStart_Click

Теперь то, что я должен написать в случае «MenuItemStart_Click», чтобы получить выбранный элемент. Я пробовал e.OriginalSource as MenuItem и sender as MenuItem, но бесполезно. Может кто-нибудь, пожалуйста, помогите мне в этом. Заранее спасибо

+1

listofConnectedItems.SelectedItem? который должен дать его вам – adminSoftDK

+0

@adminSoftDK Спасибо, чувак. Он отлично работал. Я не понимаю, как я это пропустил. В любом случае спасибо u :) – Gopi

ответ

0

Почему бы не связать свойство выбранного объекта также?

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

Затем в коде рядом с наблюдаемой коллекции

public string SelectedItemProperty {get; set;} 
+0

Я проверил ваш код, но его ничего не показываю. Поскольку @adminSoftDK говорит, что «listofConnectedItems.SelectedItem» работает. В любом случае Спасибо :) – Gopi

+0

@Gopi Я заверяю вас, что это правильный способ сделать это. Доступ к объектам по имени в обратном коде не поддерживается. Что происходит при переключении на структуру MVVM? lol Во всяком случае, удачи в этом. –

Смежные вопросы