在对象中将对象实例属性正确绑定到Label

时间:2015-03-12 14:00:05

标签: wpf vb.net data-binding

这应该很容易,但我无法让它发挥作用。

这是一个简化的例子,所以我可以说明我的问题。我有一个List(Of Object),我希望将Content的{​​{1}}绑定到列表中某个对象的某个属性。我想在代码中执行此操作(因为这些标签将在运行时生成)。

我创建了一个对象,它将保存标签和列表的值,它将保存这些对象:

Label

然后我尝试创建对象并将其添加到列表中。并尝试为标签设置绑定(为简单起见,假设我想绑定到第一个列表项)。

' The List to hold objects
Public Class BList
   Public Shared listy As New List(Of BindTest)
End Class

' Object to hold label text
Public Class BindTest
   Public Property Namy As String
End Class

到目前为止,它的工作正常,标签显示" FirstName"正如所料。但是如果我试着像这样改变第一个项目的值:

Dim bb As New BindTest
bb.Namy = "FirstName"
BList.listy.Add(bb)

B_label.SetBinding(Label.ContentProperty, "Namy")
B_label.DataContext = BList.listy.Item(0)

没有任何反应,标签也没有更新。

1 个答案:

答案 0 :(得分:0)

感谢Mike Eason

我需要实施INotifyPropertyChanged。我不知怎的想,它将自动实现所有WPF默认方式的数据绑定一切。哦,嗯,​​需要手动实现。

为了使代码起作用,这一部分:

' Object to hold label text
Public Class BindTest
   Public Property Namy As String
End Class

..必须更改为:

' Object to hold label text
Public Class BindTest
    Implements INotifyPropertyChanged

Private _Namy As String
Public Property Namy 
    Set(value)
        _Namy = value
        _PropertyChanged("Namy")
    End Set
    Get
        Return _Namy 
    End Get
End Property

Private Sub _PropertyChanged(Optional ByVal PropertyName As String = Nothing)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(PropertyName))
End Sub
Private Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
End Class