Есть ли простой способ побудить пользователя подтвердить изменение выбора поля со списком и не обрабатывать изменение, если пользователь выбрал «нет»?
У нас есть поле со списком, в котором изменение выбора приведет к потере данных. Обычно пользователь выбирает тип, а затем может вводить атрибуты этого типа. Если они меняют тип, мы очищаем все атрибуты, поскольку они больше не могут применяться. Проблема в том, что под выделением вы снова вызываете событие 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;
}
}
У меня есть два решения, ни одно из которых мне не нравится.
После того, как пользователь выберет «Нет» , удалите обработчик событий SelectionChanged
, измените выбранный элемент и затем снова зарегистрируйте обработчик событий SelectionChanged
. Это означает, что вам нужно удерживать ссылку на обработчик событий в классе, чтобы вы могли добавлять и удалять его.
Создайте логическое значение ProcessSelectionChanged
как часть класса. Всегда проверяйте его в начале обработчика событий. Установите для него значение false, прежде чем мы изменим выбор обратно, а затем сбросьте его на true. Это сработает, но я не люблю использовать флаги для аннулирования обработчика событий.
У кого-нибудь есть альтернативное решение или улучшение по сравнению с упомянутыми мной?