使用UpdateSourceTrigger绑定== LostFocus不会触发菜单或工具栏交互

thu*_*eys 8 data-binding wpf

我注意到UpdateSourceTrigger==LostFocus当用户激活菜单或工具栏时,绑定不会更新.

这导致了一种不幸的情况,即当用户从菜单或工具栏中选择"保存文件"时,用户所做的最后一次更改会丢失.

有没有一个简单的方法或我必须更改我的所有绑定UpdateSourceTrigger=PropertyChanged.

dot*_*NET 11

我知道这有点旧,但对于任何未来的读者,只需在我的ToolBar工作上设置以下内容:

FocusManager.IsFocusScope="False"
Run Code Online (Sandbox Code Playgroud)

  • 老了,但没有忘记:) (2认同)
  • 变得更老了......所以,我喜欢这样一个简单的解决方案,但我担心在某处或稍后可能添加的其他控件也不会导致文本框失去焦点。有任何想法吗? (2认同)

Hei*_*nzi 4

问题在于,当菜单项被激活时,文本框实际上并没有失去焦点。因此,UpdateSourceTriggerLostFocus不会触发。根据您的(视图)模型,UpdateSourceTriggerPropertyChanged可能是也可能不是可行的解决方法。

对我来说,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
Run Code Online (Sandbox Code Playgroud)

可以在此相关问题中找到解决此问题的其他一些方法:

(事实上​​,这种方法的功劳归功于鲁迪格罗布勒在该问题中的回答。)