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.
Согласно 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 ()
вместо ] как строку
Второй вариант у меня не сработал, потому что элемент .Text был вне области видимости (C # 4.0 VS2008). Это было моим решением ...
string test = null;
foreach (ComboBoxItem item in e.AddedItems)
{
test = item.Content.ToString();
break;
}