Связывание с UpdateSourceTrigger == LostFocus не срабатывает при взаимодействии с меню или панелью инструментов - PullRequest
8 голосов
/ 12 апреля 2011

Я заметил, что привязки с UpdateSourceTrigger==LostFocus не обновляются, когда пользователь активирует меню или панель инструментов.

Это приводит к печальной ситуации, когда последние изменения, сделанные пользователем, теряются, когда пользователь выбирает «Сохранить файл» из меню или панели инструментов.Должен ли я изменить все мои привязки на UpdateSourceTrigger=PropertyChanged.

Ответы [ 3 ]

11 голосов
/ 28 марта 2013

Я знаю, что это немного устарело, но для любого будущего читателя просто установка следующего на моем ToolBar сработала для меня:

FocusManager.IsFocusScope="False"
3 голосов
/ 11 мая 2011

Это хорошо работает для меня:

Private Sub MenuItem_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)

  Keyboard.FocusedElement.RaiseEvent(New RoutedEventArgs With {.RoutedEvent = LostFocusEvent})

End Sub
3 голосов
/ 12 апреля 2011

Проблема в том, что TextBox действительно не теряет фокус при активации пункта меню.Таким образом, UpdateSourceTrigger LostFocus не срабатывает.В зависимости от вашей модели (представления) UpdateSourceTrigger PropertyChanged может или не может быть возможным обходным путем.

Для меня PropertyChanged не вариант (мне нужно проверить данные после того, как пользователь закончил ввод его, а не промежуточного значения), поэтому я использовал обходной путь, вызвав этот метод перед «Сохранить файл» (или любой другой пункт меню / панели инструментов, для которого требуется обновленная модель):

Public Shared Sub SaveFocusedTextBox()
    Dim focusedTextBox = TryCast(Keyboard.FocusedElement, TextBox)
    If focusedTextBox IsNot Nothing Then
        Dim be = focusedTextBox.GetBindingExpression(TextBox.TextProperty)
        If be IsNot Nothing Then be.UpdateSource()
    End If
End Sub

В этом связанном вопросе можно найти несколько других подходов к этой проблеме:

(На самом деле, заслуга этого метода принадлежит ответу рудигроблера в этом вопросе.)

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