Как отменить событие ComboBox SelectionChanged?

Есть ли простой способ побудить пользователя подтвердить изменение выбора поля со списком и не обрабатывать изменение, если пользователь выбрал «нет»?

У нас есть поле со списком, в котором изменение выбора приведет к потере данных. Обычно пользователь выбирает тип, а затем может вводить атрибуты этого типа. Если они меняют тип, мы очищаем все атрибуты, поскольку они больше не могут применяться. Проблема в том, что под выделением вы снова вызываете событие SelectionChanged .

Вот отрывок:

if (e.RemovedItems.Count > 0)
{
    result = MessageBox.Show("Do you wish to continue?", 
        "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning);

    if (result == MessageBoxResult.No)
    {
        if (e.RemovedItems.Count > 0)
            ((ComboBox)sender).SelectedItem = e.RemovedItems[0];
        else
            ((ComboBox)sender).SelectedItem = null;
    }
}

У меня есть два решения, ни одно из которых мне не нравится.

  1. После того, как пользователь выберет «Нет» , удалите обработчик событий SelectionChanged , измените выбранный элемент и затем снова зарегистрируйте обработчик событий SelectionChanged . Это означает, что вам нужно удерживать ссылку на обработчик событий в классе, чтобы вы могли добавлять и удалять его.

  2. Создайте логическое значение ProcessSelectionChanged как часть класса. Всегда проверяйте его в начале обработчика событий. Установите для него значение false, прежде чем мы изменим выбор обратно, а затем сбросьте его на true. Это сработает, но я не люблю использовать флаги для аннулирования обработчика событий.

У кого-нибудь есть альтернативное решение или улучшение по сравнению с упомянутыми мной?

20
задан Rob 6 March 2012 в 19:10
поделиться