我有
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
该类实现了INotifyPropertyChanged,并且我绑定到WinForm控件中的TextBox控件。
问题是当用户在文本框中键入一个值时,即使绑定值与IsNew为false,绑定值保持不变,文本框中也会显示新值。 (我尝试过使用两种类型的DataSourceUpdateMode。)
我已阅读INotifyPropertyChanged problem并且我相信Windows窗体的工作方式基本相同,因为事件的发起人也不会检测到处理事件。
我可以在BO类中做些什么来强制控件响应INotifyPropertyChanged事件?或者在BO类中还有其他东西可以让控件显示正确的值吗?
我意识到我可以通过各种方式在GUI代码中处理这个问题,但这不是我的目标。
答案 0 :(得分:0)
我找到了答案。
首先这是一个问题,Rocky Lhotka已经注意到了这一点。我使用的解决方案来自他。
首先,他有一个控件可以放在表单或用户控件上,它可以解决问题。
他还有一些我稍微修改和使用的代码,并将其放在我们的基本表单和用户控件上。
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