Как остановить ComboBox SelectionChange из события SelectionChanged - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть ComboBox, который связан со списком. Предположим, у меня есть 10 пунктов в списке, поэтому в выпадающем списке также.

В настоящий момент в ComboBox выбран 2-й элемент.

Теперь я выбираю третий элемент в ComboBox.

В событии Combobox SelectionChanged я выполняю некоторую проверку, и проверка завершается неудачно, поэтому я не хочу, чтобы мой Выбор был изменен со 2-го элемента на 3-й элемент или выбор должен остаться во 2-м элементе.

Пожалуйста, дайте мне знать, как это сделать?

В событии ComboBox SelectionChanged я попытался установить ComboBox.SelectedItem = 2ndItem.

Но это не сработало должным образом.

Надеюсь, мое требование ясно. Если у вас есть какие-либо сомнения, пожалуйста, не стесняйтесь спрашивать меня.

С уважением,

Vimal

1 Ответ

1 голос
/ 15 сентября 2010

Отключите элемент, чтобы пользователь увидел, что в данный момент он не является опцией (а также не может выбрать).Вы можете установить свойство IsEnabled для ComboBoxItem.

Если вы работаете с MVVM, добавьте свойство IsEnabled в свою ViewModel и привяжите его к свойству IsEnabled контейнера (ItemContainerStyle).

Однако лучшим вариантом IMO будет, чтобы не отображать элементы, которые нельзя выбрать.

Обновление

Как и было обещано в комментарии, здесь приведен код диспетчера для установки SelectedItem с задержкой:

Dispatcher.BeginInvoke(new Action(delegate {  
    yourComboBox.SelectedItem=yourOldItem;       
    }), System.Windows.Threading.DispatcherPriority.ContextIdle, null); 

Думаю, это поможет, но это не очень приятно.Если у вас есть возможность отключить или скрыть элементы, это будет намного лучше.Кстати, я взял ContextIdle за приоритет диспетчера.Это очень сильная ценность.Вы можете поиграть, какое значение соответствует вашим потребностям.

CoerceValueCallback

Другой возможностью будет получение из Combobox, изменение метаданных для SelectedItem и добавлениеCoerceValueCallback к нему.Там вы можете сбросить значение.

...