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

时间:2009-02-05 22:12:39

标签: winforms data-binding inotifypropertychanged

我有

    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代码中处理这个问题,但这不是我的目标。

1 个答案:

答案 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