Winforms 防止数据绑定中的属性更改并强制绑定控件显示当前值
我有 该类实现INotifyPropertyChanged,并且我绑定到WinForm控件中的TextBox控件 问题在于,当用户在文本框中键入一个值时,即使绑定值保持不变,新值也会显示在文本框中,因为IsNew为false。我尝试过使用这两种类型的DataSourceUpdateMode 我已经读过,并且相信windows窗体的工作方式基本相同,事件的发起人也不会检测和处理事件 在BO类中,我可以做些什么来强制控件响应INotifyPropertyChanged事件吗?或者我可以在BO类中使用其他方法来让控件显示正确的值吗 我意识到我可以用各种方式在GUI代码中处理这个问题,但这不是我的目标。我找到了答案 首先,这是一个问题,洛基·洛特卡已经注意到了这一点。我使用的解决方案来自他 首先,他有一个控件,你可以把它放在窗体或用户控件上,这样就解决了问题 他还有一些代码,我稍微修改并使用了这些代码,并将其放在我们的基本表单和用户控件上Winforms 防止数据绑定中的属性更改并强制绑定控件显示当前值,winforms,data-binding,inotifypropertychanged,Winforms,Data Binding,Inotifypropertychanged,我有 该类实现INotifyPropertyChanged,并且我绑定到WinForm控件中的TextBox控件 问题在于,当用户在文本框中键入一个值时,即使绑定值保持不变,新值也会显示在文本框中,因为IsNew为false。我尝试过使用这两种类型的DataSourceUpdateMode 我已经读过,并且相信windows窗体的工作方式基本相同,事件的发起人也不会检测和处理事件 在BO类中,我可以做些什么来强制控件响应INotifyPropertyChanged事件吗?或者我可以在BO类中使用
Public Overrides Property UID() As String
Get
Return mUID
End Get
Set(ByVal value As String)
If Me.IsNew Then
mUID = value
End If
OnPropertyChanged("UID")
End Set
End Property
如果将对OnPropertyChangedUID的调用放在if Me.IsNew块中,会发生什么?
Private Sub baseUserControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
HookBindings(Me)
End Sub
Private Sub HookBindings(ByVal CNTRL As Control)
For Each ctl As Control In CNTRL.Controls
If Not TypeOf ctl Is baseUserControl Then
For Each b As Binding In ctl.DataBindings
AddHandler b.BindingComplete, AddressOf ReadBinding
Next
HookBindings(ctl)
End If
Next
End Sub
Private Sub ReadBinding(ByVal sender As Object, ByVal e As BindingCompleteEventArgs)
e.Binding.ReadValue()
End Sub