ListBox.SelectedIndexChanged - вы можете определить, был ли он инициирован пользователем? - PullRequest
3 голосов
/ 18 июня 2010

Мой вопрос похож на этот: Как предотвратить событие ListBox.SelectedIndexChanged? , но я хочу задать его по-другому.

Существует ли простой способ определить, является ли«SelectedIndexChanged» приходит от пользователя, а не инициируется с помощью кода (например, ListBox.SelectedIndex = x)?

Ответы [ 3 ]

4 голосов
/ 18 июня 2010

Насколько я знаю, нет, встроенного простого способа нет. Лучшее, что я смог сделать - это установить флаг непосредственно перед его изменением в коде, а затем позволить обработчику событий сбросить флаг и вернуться.

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

3 голосов
/ 19 июля 2010

Для меня событие «SelectionChangeCommitted» больше подходило для моих целей. Он срабатывает, когда выбранное выделение выбрано. Это самый простой способ обработки конкретного случая, когда конечный пользователь инициирует изменение. SelectedIndexChanged - захватывать все случаи.

2 голосов
/ 18 июня 2010

Слушатели изменения свойства не различают причины изменения свойства. Это общая проблема. Установка флага - способ сделать это.

Мне бы очень хотелось, чтобы был способ устанавливать значения без запуска событий изменения свойств. Но затем люди утверждают, что это нарушает всю объектно-ориентированную модель, потому что эффективно позволяет изменять поле напрямую, без использования свойства.

...