我的应用中有一个带LongListSelector的页面。我还有一个ObservableCollection,它包含streamItem项,一个主要包含一些字符串的自定义类。在页面加载时,我将LongListSelector的ItemsSource设置为ObservableCollection。 LongListSelector现在将按预期显示streamItems,数据绑定正常工作。
但是,现在我想更新streamItem。例如,我想更改其中一个项目中的字符串。我希望这种改变,由于数据绑定,立即反映在LongListSelector中,但它不会发生。
如果我在ItemsSource中更改了某些内容,我该怎么做才能使LongListSelector更新?这是我正在使用的一组精简代码。
streamItem类:
Public Class streamItem
Public Property headerText As String
Public Property msgText As String
End Class
变量tableData的解析,即ObservableCollection:
Public Shared tableData As New ObservableCollection(Of streamItem)
在页面加载时,向tableData添加一个项目并设置LongListSelector(其名称为tblStream)ItemsSource:
Dim newItem As New App.streamItem
newItem.headerText ="Header"
newItem.msgText = "Some other text"
App.tableData.Add(newItem)
tblStream.ItemsSource = App.tableData
XAML部分:
<phone:LongListSelector x:Name="tblStream">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0" Orientation="Vertical">
<TextBlock Text="{Binding headerText}" />
<TextBlock Text="{Binding msgText}" />
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
为了测试,我创建了一个按钮来执行此操作:
App.tableData.Item(0).msgText = "Text changed."
单击时,我希望LongListSelector能够反映这一变化,但没有任何反应。我该如何解决?提前谢谢。
答案 0 :(得分:1)
ObservableCollection
在插入/删除/移动项目时通知视图。如果要查看集合中已有项目属性的更改,则项目类(在您的情况下为streamItem
)应实现INotifyPropertyChanged
并在设置属性时触发此事件。