среда, 12 августа 2009 г.

Выполнение кода после изменения текста в ComboBox

Стоит задача после изменения значения в ComboBox, вывести некоторое сообщение пользователю, например, в MessageBox.
В XAML все просто:
<ComboBox SelectionChanged="ComboBox_SelectionChanged" >
  <ItemsControl>1</ItemsControl>
  <ItemsControl>2</ItemsControl>
  <ItemsControl>3</ItemsControl>
  <ItemsControl>4</ItemsControl>
</ComboBox>

* This source code was highlighted with Source Code Highlighter.

Но если в обработчике события тупо вызывать MessageBox.Show возникает проблема: пользователь уже видит MessageBox, а изменение текста еще не произошло :( Что может ввести пользователя в заблуждение.
Решить проблему можно вот таким достаточно извращенным способом:
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
  DispatcherTimer t = null;
  t = new DispatcherTimer(new TimeSpan(1), DispatcherPriority.Background, (s, e1) => { t.Stop(); MessageBox.Show("asdfvasdvc"); }, this.Dispatcher);
  t.Start();
}

* This source code was highlighted with Source Code Highlighter.


Но надо будет еще подумать... что то ведь должно быть проще.