Прикрепленное поведение команд и LostFocus - PullRequest
0 голосов
/ 17 августа 2011

Я использую метод , описанный здесь , чтобы присоединить ICMmand ViewModel к событию LostFocus Combobox, установив CommandBehavior.RoutedEventName="LostFocus". Я ожидал, что событие сработает одновременно с привязкой для UpdateSourceTrigger=LostFocus, но, похоже, это не так.

Связывание выбранного элемента UpdateSourceTrigger=LostFocus срабатывает всякий раз, когда клавиатура уходит, или после того, как пользователь фактически выбирает элемент из выпадающего списка, щелкая (не уверен, почему это вызывает потерю фокуса, но, по крайней мере, он срабатывает ПОСЛЕ выбора).

Прикрепленное событие поведения срабатывает каждый раз, когда пользователь нажимает на поле со списком. Немедленно. При использовании клавиатуры она ведет себя нормально, стреляя, когда вы нажимаете на нее. Однако при использовании мыши событие срабатывает, когда элемент управления фокусируется, прежде чем пользователь даже сделает выбор. Есть ли способ заставить его вести себя так же, как lostfocus для выбранного элемента?

Редактировать : Мне любопытно, существует ли другой ответ, но я нашел способ обойти эту проблему, установив дополнительную привязку. SelectedItem обновляет по умолчанию, обрабатывая обычные уведомления об изменениях свойств и selectedvalue обновляет в lostfocus, обрабатывая только те команды, которые я пытался запустить. Обвязка выглядит так:

SelectedItem="{Binding Path=SelectedCustomer, Mode=TwoWay}"
                  SelectedValuePath="CM_CUSTOMER_ID"
                  SelectedValue="{Binding Path=CustomerLostFocus, UpdateSourceTrigger=LostFocus}"

1 Ответ

0 голосов
/ 17 августа 2011

Вам необходимо проверить OriginalSource аргументов события для события LostFocus :

Событие LostFocus является пузырьковым событием. Это означает, что если несколько Обработчики событий LostFocus зарегистрированы для последовательности объектов связаны родительскими и дочерними отношениями в дереве объектов, событие принимается каждым объектом в этих отношениях. Пузырящаяся метафора указывает, что событие начинается с объекта, который непосредственно получает входное условие, и работает до дерева объектов. Для всплывающее событие, идентифицирует отправитель, доступный для обработчика события объект, где обрабатывается событие, не обязательно объект, который фактически получил условие ввода, которое инициировало событие. Получить объект, который инициировал событие, используйте значение OriginalSource данные события RoutedEventArgs.

Таким образом, для ComboBox вы можете получать события для различных фокусируемых элементов внутри ComboBox.

...