我在ItemTemplate上有一个带有Label1和Button1的DataRepeater1。这三个控件绑定到BindingList(Of T),其中T是atm,一个非常简单的类,它有一个字符串属性
当用户单击其中一个DataRepeater项目按钮时,它会更新绑定数据列表中的字符串。 I.E.如果用户单击DataRepeater中项目0上的按钮,则相同索引处的BindingList中的字符串将更改。
这有效
在字符串更改之后不起作用的是DataRepeater应该为相关项更新Label1,因为它绑定到该字符串 - 但它没有。
谁能告诉我为什么?我目前的代码如下。感谢
Imports System.ComponentModel
Public Class Form1
Class ListType
Public Sub New(newString As String)
Me.MyString = newString
End Sub
Public Property MyString As String
End Class
Dim MyList As New BindingList(Of ListType)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Bind BindingList to DataRepeater.
Label1.DataBindings.Add("Text", MyList, "MyString")
DataRepeater1.DataSource = MyList
' Add some items to the BindingList.
MyList.Add(New ListType("First"))
MyList.Add(New ListType("Second"))
MyList.Add(New ListType("Third"))
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' Use the Index of the current item to change the string
' of the list item with the same index.
MyList(DataRepeater1.CurrentItemIndex).MyString = "Clicked"
' Show all the current list strings in a label outside of
' the DataRepeater.
Label2.Text = String.Empty
For Each Item As ListType In MyList
Label2.Text = Label2.Text & vbNewLine & Item.MyString
Next
End Sub
End Class
答案 0 :(得分:2)
INotifyPropertyChanged接口用于通知客户端(通常是绑定客户端)属性值已更改。
正是使用这种机制,BindingList
类能够将单个对象的更新推送到DataRepeater
。
如果您在INotifyPropertyChanged
中实施T
界面,BindingList
会收到T
的任何更改通知,并将其转发至DataRepeater
您。只要更改了属性(在PropertyChanged
属性的设置者中),您就必须引发T
事件。
.NET Framework文档使用此方法有walkthrough。
答案 1 :(得分:0)
如:
Dim changing As ListType = MyList(DataRepeater1.CurrentItemIndex)
changing.MyString = "Clicked"
MyList(DataRepeater1.CurrentItemIndex) = changing
或更短的版本:
MyList(DataRepeater1.CurrentItemIndex).MyString = "Clicked"
MyList(DataRepeater1.CurrentItemIndex) = MyList(DataRepeater1.CurrentItemIndex)
像BindingList似乎只是在整个对象发生变化时通知DataRepeter而不是对象的成员......