【问题标题】:Binding a VB.NET label.text to an object property将 VB.NET label.text 绑定到对象属性
【发布时间】:2013-09-29 20:53:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: vb.net data-binding


    【解决方案1】:

    是的,这是可能的,但您需要引发一个事件,让标签知道属性已更改。如果您使用的是 BindingList 之类的类型,这将自动完成,但您尝试绑定到不会引发 PropertyChanged 事件的String

    要将事件添加到您的班级:

    • 更改您的类定义以实现 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 属性,以便您可以看到新值。

    【讨论】:

    • 谢谢!正是我今天要找的。​​span>
    猜你喜欢
    • 2011-10-03
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 2010-12-21
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多