这应该很容易,但我无法让它发挥作用。
这是一个简化的例子,所以我可以说明我的问题。我有一个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)
没有任何反应,标签也没有更新。
答案 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