2013-09-29 162 views
4

我想在表单中有一个标签,其文本值根据类实例的值而变化。它看起来像我可以将标签的文本值绑定到对象dataSource。当我尝试它时,它似乎不起作用。将VB.NET label.text绑定到对象属性

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

我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 

我想我所做的是绑定到类,而不是一个类的实例。考虑一下,我真正想要做的是将一个类的实例绑定到一个标签上......如何? 这可能吗?

回答

6

是的,这是可能的,但您需要举办活动让标签知道该物业已更改。如果您使用类似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事件绑定,增加了字段名为ItemInfo类型的ItemInfoBindingSource,并更新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属性,以便您可以看到新值。

+0

谢谢!正是我今天所期待的。 – thephez

相关问题