1

我有

    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 问题,并且我相信 Windows 窗体的工作方式基本相同,因为事件的发起者也不会检测到处理事件。

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

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

4

1 回答 1

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
于 2009-02-13T15:19:43.160 回答