0

我的应用中有一个带有 LongListSelector 的页面。我还有一个 ObservableCollection,其中包含 streamItem 项,这是一个主要包含一些字符串的自定义类。页面加载后,我将 LongListSelector 的 ItemsSource 设置为 ObservableCollection。LongListSelector 现在将按预期显示 streamItems,数据绑定正常工作。

但是,现在我想更新一个streamItem。例如,我想更改其中一项中的字符串。由于数据绑定,我希望这种更改会立即反映在 LongListSelector 中,但它不会发生。

一旦我更改了它的 ItemsSource 中的某些内容,我该怎么做才能使 LongListSelector 更新?这是我正在使用的一组精简代码。

流项目类:

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 反映此更改,但没有任何反应。我该如何解决?提前致谢。

4

1 回答 1

1

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

于 2013-08-13T22:51:39.157 回答