【发布时间】:2014-10-14 19:57:34
【问题描述】:
我正在尝试找到一种方法来暂停对TextBox 控件的更新,当它具有焦点时,它仍然能够在用户按下 Enter 键时使用UpdateSource() 更新源。一些solutions 建议暂停源触发PropertyChangedEvent,但在我的情况下,值绑定到多个控件,我不想暂停它们的更新。
其他一些人也建议从控件中删除绑定,但这会重置TextBox 的值(我希望Text 属性保持不变),当我再次设置绑定时,它也会首先发送FallbackValue,因为设置了绑定也清除了财产的价值。
在WinForms我已经通过以下代码完成了这个场景:
Public Class BindingTextBox
Inherits TextBox
Private Sub BindingTextBox_Enter(sender As Object, e As System.EventArgs) Handles Me.Enter
Me.DataBindings.Item("Text").ControlUpdateMode = ControlUpdateMode.Never
End Sub
Private Sub BindingTextBox_Leave(sender As Object, e As System.EventArgs) Handles Me.Leave
Me.DataBindings.Item("Text").ControlUpdateMode = ControlUpdateMode.OnPropertyChanged
End Sub
Private Sub BindingTextBox_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Select Case e.KeyCode
Case Keys.Enter
Me.DataBindings.Item("Text").WriteValue()
Case Keys.Escape
Me.DataBindings.Item("Text").ReadValue()
End Select
End Sub
End Class
如何在 WPF 中重新创建此功能?
编辑:
也许我不清楚。我的目标是进行双向绑定,对源进行显式更新,并在控制获得焦点时从源“暂停”更新。
【问题讨论】:
-
您可以尝试将
Binding的UpdateSourceTrigger设置为UpdateSourceTrigger.Explicit并使用BindingExpression使用UpdateSource()方法手动更新。 -
更新源不是问题,我已经做到了。我的问题是停止从源更新,但可以使用
UpdateSource()将其更新为源 -
尝试将Binding的
Mode设置为OneWayToSource。
标签: .net wpf vb.net data-binding