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