Другой шаблон, который работает, - это удалить прослушиватель событий, сделать выбор, снова добавить список событий. Это гарантирует, что в коде есть единственное место, где вам нужно об этом беспокоиться - с флагом вам придется одновременно поддерживать два места.
Кроме того, SelectionChangedChanged возможно (хотя и не уверен) помещается поверх стека событий (т.е. выполняется асинхронно). В этом случае вы также минимизируете период, в течение которого зритель не распространяет уведомление.
В целом меня разочаровывает то, что сгенерированное SelectionChangedEvent одинаково, независимо от того, была ли нажата мышь. Я полагаю, это сделать не так легко, как хотелось бы. Однажды мне пришлось изменить поведение класса текстового редактора, чтобы он в новинку касался двух видов событий вставки (сгенерированных пользователем и сгенерированных сетью), чтобы сделать этот класс текстовым редактором общим. Я хотел бы видеть больше обсуждения этого.