Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 将对象实例属性正确绑定到代码中的标签_Wpf_Vb.net_Data Binding - Fatal编程技术网

Wpf 将对象实例属性正确绑定到代码中的标签

Wpf 将对象实例属性正确绑定到代码中的标签,wpf,vb.net,data-binding,Wpf,Vb.net,Data Binding,这应该很容易,但我不能让它工作 这是一个简化的例子,因此我可以说明我的问题。我有一个列表(对象),我想将标签的内容绑定到列表中对象的某些属性。我希望在代码中这样做(因为这些标签将在运行时生成) 我创建的对象将保存标签和列表的值,该列表将保存这些对象: ' The List to hold objects Public Class BList Public Shared listy As New List(Of BindTest) End Class ' Object to hold la

这应该很容易,但我不能让它工作

这是一个简化的例子,因此我可以说明我的问题。我有一个
列表(对象)
,我想将
标签的
内容
绑定到列表中对象的某些属性。我希望在代码中这样做(因为这些标签将在运行时生成)

我创建的对象将保存标签和列表的值,该列表将保存这些对象:

' 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”,正如预期的那样。但是如果我尝试像这样更改第一项的值:

BList.listy.Item(0).Namy = "Something else"
没有任何事情发生,标签也没有更新。

多亏了

我需要实现
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

您的属性Namy未实现INotifyPropertyChanged。见@MikeEason谢谢。这很有帮助。我对WPF比较陌生。我不知怎么想,那个接口是自动实现的。我明白了,我必须手动实现它。
' 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