是的,这是可能的,但您需要引发一个事件,让标签知道属性已更改。如果您使用的是 BindingList 之类的类型,这将自动完成,但您尝试绑定到String
不会引发 PropertyChanged 事件的类型。
要将事件添加到您的班级:
- 更改您的类定义以实现 INotifyPropertyChanged
- 添加对应的 PropertyChanged 事件
- 将自动实现的属性更改为扩展属性并引发事件。
以下是您类中的 ItemNumber 属性的这些更改的结果:
Public Class ItemInfo
Implements System.ComponentModel.INotifyPropertyChanged
Private _itemNumber As String = "rename"
Public Property ItemNumber As String
Get
Return _itemNumber
End Get
Set(value As String)
_itemNumber = value
RaiseEvent PropertyChanged(Me,
New System.ComponentModel.PropertyChangedEventArgs("ItemNumber"))
End Set
End Property
Public Event PropertyChanged(sender As Object,
e As System.ComponentModel.PropertyChangedEventArgs) _
Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
End Class
我在表单中添加了一个文本框和标签,在Form.Load
事件中添加了数据绑定,添加了一个名为 ItemInfoBindingSource 的 ItemInfo 类型的字段,并更新了TextBox.TextChanged
事件中的 ItemNumber。
Private ItemInfoBindingSource As New ItemInfo
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label1.DataBindings.Add("Text", Me.ItemInfoBindingSource, "ItemNumber")
End Sub
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) _
Handles TextBox1.TextChanged
ItemInfoBindingSource.ItemNumber = TextBox1.Text
End Sub
现在,当您在文本框中键入时,ItemNumber.Set 会被调用,并引发一个事件,让任何正在收听的人都知道它已被更改。标签正在侦听,它会更新其 Text 属性,以便您可以看到新值。