不会出现LongListSelector的ItemsSource项的更改

时间:2013-08-13 13:14:40

标签: vb.net windows-phone-8 winrt-xaml

我的应用中有一个带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能够反映这一变化,但没有任何反应。我该如何解决?提前谢谢。

1 个答案:

答案 0 :(得分:1)

ObservableCollection在插入/删除/移动项目时通知视图。如果要查看集合中已有项目属性的更改,则项目类(在您的情况下为streamItem)应实现INotifyPropertyChanged并在设置属性时触发此事件。