我一直在试图将一个标签绑定到只读属性。我有一个更复杂的项目,我正在实施它,它不工作。我一直未能获得帮助,所以我创建了一个更简单的项目版本,并且我的数据绑定仍然没有更新。数据绑定不更新
要复制我的问题,您将需要一个带有文本框,标签和按钮的窗体,然后是一个类。
该类的代码如下
Imports System.ComponentModel
Public Class databinding
Implements INotifyPropertyChanged
Public Sub New()
numbers = New List(Of number)
End Sub
Public Property numbers As List(Of number)
Get
Return m_number
End Get
Set(value As List(Of number))
m_number = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("hnumber"))
End Set
End Property
Private m_number As List(Of number)
Public ReadOnly Property hnumber As Integer
Get
Dim list As IList(Of number) = (From t As number In numbers Select t Order By t.value Descending).ToList()
If (list.Count > 0) Then
If (IsNothing(list(0).value)) Then
Return "0"
Else
Return list(0).value
End If
End If
Return "0"
End Get
End Property
Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
End Class
Public Class number
Public Property value As Integer
Get
Return t_number
End Get
Set(value As Integer)
t_number = value
End Set
End Property
Private t_number As Integer
End Class
该窗体的代码如下:
Public Class Form1
Public numberlist As New databinding
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label1.DataBindings.Add(New Binding("text", numberlist, "hnumber"))
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim newnum As New number
newnum.value = TextBox1.Text
numberlist.numbers.Add(newnum)
End Sub
End Class
现在根据我的理解,当你从文本框中单击该按钮数量被添加到这个列表中,发生这种情况,并且hnumber值更新,使用我可以看到的断点和手表也会发生。从阅读我需要实现inotifypropertychanged当我设置新号码以获取标签重新检查数据绑定(已完成)。
但是,标签将保持在0.如果我通过Label1运行手表,我可以在DataBindings> List> arrayList>(0)> System.Windows.Forms.Binding> DataSource> Databinding_test.databinding中查看细节类(包括hnumber的正确值)被列出,所以对我来说,这表明标签实际上知道它应该绑定的值。
有人可以请我填写我失踪的事情,使这一切工作,因为它几乎使我拔出我所有的头发。
感谢, MTG