Winforms 防止数据绑定中的属性更改并强制绑定控件显示当前值

Winforms 防止数据绑定中的属性更改并强制绑定控件显示当前值,winforms,data-binding,inotifypropertychanged,Winforms,Data Binding,Inotifypropertychanged,我有 该类实现INotifyPropertyChanged,并且我绑定到WinForm控件中的TextBox控件 问题在于,当用户在文本框中键入一个值时,即使绑定值保持不变,新值也会显示在文本框中,因为IsNew为false。我尝试过使用这两种类型的DataSourceUpdateMode 我已经读过,并且相信windows窗体的工作方式基本相同,事件的发起人也不会检测和处理事件 在BO类中,我可以做些什么来强制控件响应INotifyPropertyChanged事件吗?或者我可以在BO类中使用

我有

该类实现INotifyPropertyChanged,并且我绑定到WinForm控件中的TextBox控件

问题在于,当用户在文本框中键入一个值时,即使绑定值保持不变,新值也会显示在文本框中,因为IsNew为false。我尝试过使用这两种类型的DataSourceUpdateMode

我已经读过,并且相信windows窗体的工作方式基本相同,事件的发起人也不会检测和处理事件

在BO类中,我可以做些什么来强制控件响应INotifyPropertyChanged事件吗?或者我可以在BO类中使用其他方法来让控件显示正确的值吗

我意识到我可以用各种方式在GUI代码中处理这个问题,但这不是我的目标。

我找到了答案

首先,这是一个问题,洛基·洛特卡已经注意到了这一点。我使用的解决方案来自他

首先,他有一个控件,你可以把它放在窗体或用户控件上,这样就解决了问题

他还有一些代码,我稍微修改并使用了这些代码,并将其放在我们的基本表单和用户控件上

    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