Дифференцирующий выбор меняется в зависимости от вызова из кода или изменяется вручную - PullRequest
2 голосов
/ 08 декабря 2011

Хотелось бы узнать, возможно ли внести изменения в изменение выбора в выпадающем списке.Я хочу провести различие между пользователем, который вручную щелкает по списку и изменяет его значение, и изменением в выделении, которое я делаю из кода.

т.е.измените его значение вручную, событие сработает, но если я сделаю myCombobox.selectedItem = 1 [ edit ], события не сработают

Есть ли событие,такое поведение в wpfcombobox?Если нет, то знаете ли вы, как это сделать?

Спасибо

[ edit ] или это обязательноевыпадающий список, который меняет свое значение

Ответы [ 2 ]

3 голосов
/ 09 декабря 2011

Вы имеете дело с несколькими различными сценариями, оба из которых являются разрешимыми.

1) Не обрабатывать запросы SelectedItem во время привязки данных. У вас есть как минимум два варианта:

a) Не добавляйте обработчики событий в элемент управления до тех пор, пока не будет завершена привязка данных или не будет загружена форма (в зависимости от того, является ли привязка данных автоматической или ручной).

b) Установить свойство уровня формы, указывающее, когда можно обрабатывать событие SelectedItem. Возможно, вы захотите установить значение true после загрузки формы или после завершения привязки данных. В вашем коде SelectedItem не выполняйте никаких действий, если это свойство не имеет значение true.

2) Обрабатывать логику SelectedItem, если SelectedItem изменяется программно. Опять два варианта:

a) Извлеките свою логику из события SelectedItem в метод, а затем вызовите этот метод при выполнении логики для установки выбранного элемента.

b) Создайте пользовательский комбинированный список, который наследуется от базы, и добавьте метод SetSelectedItem (например) в эту унаследованную комбинацию. Этот метод затем вызовет метод SelectedItem. Это можно использовать повторно, и вам не нужно будет выполнять 2 части работы каждый раз, когда вы устанавливаете SelectedItem вручную.

2 голосов
/ 08 декабря 2011

Прежде чем изменить выбранный элемент в коде, удалите обработчик событий с помощью -=, а затем добавьте его обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...