Проблема в том, что 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
В этом связанном вопросе можно найти несколько других подходов к этой проблеме:
(На самом деле, заслуга этого метода принадлежит ответу рудигроблера в этом вопросе.)