Событие ComboBox - SelectionChanged имеет старое значение, не новое значение

C#.NET 4.0, VS2010.

В новинку для WPF. У меня есть ComboBox на моем MainWindow. Я сцепил событие SelectionChanged упомянутого поля комбинированного списка. Однако, если я исследую значение поля комбинированного списка в конечном счете обработчик, это имеет старое значение. Это больше походит на событие "SelectionChanging", чем событие SelectionChanged.

Как я получаю новое значение ComboBox после того, как выбор на самом деле произошел?

В настоящее время:

this.MyComboBox.SelectionChanged += new SelectionChangedEventHandler(OnMyComboBoxChanged);

...
private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
    string text = this.MyComboBox.Text;
}

Отметьте, я получаю то же поведение, если я использую объект, передаваемый в конечном счете args, например, e. OriginalSource.

83
задан Kay Lee 21 December 2016 в 04:04
поделиться

2 ответа

Согласно MSDN, e.AddedItems :

Получает список, содержащий выбранные элементы.

Таким образом, вы можете использовать:

private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
    string text = (e.AddedItems[0] as ComboBoxItem).Content as string;
}

Вы также можете использовать SelectedItem , если используете строковые значения для Items от отправителя ]:

private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
    string text = (sender as ComboBox).SelectedItem as string;
}

или

private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
    string text = ((sender as ComboBox).SelectedItem as ComboBoxItem).Content as string;
}

Поскольку оба Content и SelectedItem являются объектами, более безопасным подходом будет использование .ToString () вместо ] как строку

98
ответ дан 24 November 2019 в 08:47
поделиться

Второй вариант у меня не сработал, потому что элемент .Text был вне области видимости (C # 4.0 VS2008). Это было моим решением ...

string test = null;
foreach (ComboBoxItem item in e.AddedItems)
{
   test = item.Content.ToString();
   break;
}
1
ответ дан 24 November 2019 в 08:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: