ListBox wpf SelectItem как получить в коде

288
17 октября 2017, 00:47
ListBox lBox = new ListBox();
lBox.Items.Add("asdasd");
lBox.Items.Add("ыва23");
nb.Children.Add(lBox);

Как получить выделенный Item из списка?

Answer 1

Используйте свойство SelectedItem, например:

MessageBox.Show((string)lBox.SelectedItem);

Для того, чтобы отслеживать смену текущего элемента, подпишитесь на событие SelectionChanged:

lBox.SelectionChanged += lBox_SelectionChanged;

пример обработчика:

private void lBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show((string)lBox.SelectedItem);
}
Answer 2

Если вы не используете WPF и MVVM то применяйте решение, которое дал уважаемый @Андрей. Если же все же используете то поступайте так :

XAML :

<Window x:Class="WpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp1"
    mc:Ignorable="d" Loaded="Window_Loaded"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <ListBox SelectedItem ="{Binding SelectedItem}" ItemsSource="{Binding ListBoxItemcColllections}" Margin="0,65,0,150"/>
    <Label Content="{Binding SelectedItem}" HorizontalAlignment="Center" VerticalAlignment="Top"/>
</Grid>

Событие при загрузке формы :

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        this.DataContext = new ViewModel();
    }

Сам класс вьюмодели :

 class ViewModel : INotifyPropertyChanged
{
    public ObservableCollection<string> ListBoxItemcColllections { get; set; }
    private string selectedItem { get; set; }

    public string SelectedItem
    {
        get
        {
            return selectedItem;
        }
        set
        {
            selectedItem = value;
            NotifyPropertyChanged("SelectedItem");
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    public ViewModel()
    {
        ListBoxItemcColllections = new ObservableCollection<string>();
        ListBoxItemcColllections.Add("111");
        ListBoxItemcColllections.Add("222");
        ListBoxItemcColllections.Add("333");
    }
}

Результат :

READ ALSO
ASP.NET.Не работает метод JavaScript()

ASP.NET.Не работает метод JavaScript()

Из метода действия в контроллере вызываю метод JavaScript()Почему в браузере при обращении к методу действия он не выводится?

246
Запомнить старое положение вкладок TabControl WPF

Запомнить старое положение вкладок TabControl WPF

Как запомнить старое положение вкладок в TabControl при каждом запуске программы***Мое решение При закрытие программы запоминаю индекс каждой...

294