2013-09-29 159 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

相關問題