Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将VB.NET label.text绑定到对象属性_Vb.net_Data Binding - Fatal编程技术网

将VB.NET label.text绑定到对象属性

将VB.NET label.text绑定到对象属性,vb.net,data-binding,Vb.net,Data Binding,我想要一个标签,其文本值根据类实例的值而变化。看起来我可以将标签的文本值绑定到对象数据源。当我尝试这种方法时,它似乎不起作用 Me.Label4.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.ItemInfoBindingSource, "ItemNumber", True, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)) My itemInf

我想要一个标签,其文本值根据类实例的值而变化。看起来我可以将标签的文本值绑定到对象数据源。当我尝试这种方法时,它似乎不起作用

Me.Label4.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.ItemInfoBindingSource, "ItemNumber", True, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged))
My itemInfoBindingSource:

Me.ItemInfoBindingSource.DataSource = GetType(CFP.ItemInfo)
以及类别定义:

Public Class ItemInfo
    Public Property ItemNumber As String = "rename"
    Public Property Description As String
    Public Property FileLocation As String
    Public Property CompileHistory As List(Of CompileHistory)
End Class
我认为我所做的是绑定到一个类,而不是一个类的实例。仔细想想,我真正想做的是将一个类的实例绑定到一个标签上。。。怎么用?
这可能吗?

是的,这是可能的,但您需要引发一个事件,让标签知道属性已更改。如果您使用的是BindingList之类的类型,这将自动完成,但是您试图绑定到一个
字符串
,该字符串不会引发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,并引发一个事件,让任何侦听的对象都知道它已被更改。标签正在侦听,它会更新其文本属性,以便您可以看到新值。

谢谢!这正是我今天想要的。