滚动时WP7列表框项目不同步

时间:2012-05-01 13:22:20

标签: c# silverlight windows-phone-7 xaml silverlight-toolkit

我的页面有一个列表框,其中包含以下项目模板,如下所示:

<ListBox x:Name="test">
    <ListBox.ItemTemplate>
        <DataTemplate>
                <Grid MaxHeight="108" Margin="0,0,0,10">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="4" />
                        <ColumnDefinition Width="auto" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <Rectangle Height="108" Grid.Column="0" Fill="{Binding Color}"/>
                    <Image Source="{Binding Image}" Height="108" Width="108" Grid.Column="1" HorizontalAlignment="Left" Stretch="UniformToFill"/>
                    <StackPanel Grid.Column="2">
                        <TextBlock Text="{Binding Title}" TextWrapping="NoWrap" />
                        <TextBlock Text="{Binding SubHeading}" TextWrapping="NoWrap" />
                        <TextBlock Text="{Binding Body}" TextWrapping="Wrap" />
                    </StackPanel>
                </Grid>
         </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

在页面的OnNavigatedTo事件中,我将列表框的项目源设置为大约20个项目的可观察集合。

一切顺利,列表已填充,但是当我向上或向下滚动列表时,项目在UI上看起来看起来不同步。例如,第一个列表项中显示的文本显示在列表框的最后一项上,有时会有重复项,每次向上或向下滑动项目都是不同的。

我调试了列表框项目,我可以看到正确的对象被绑定到正确的项目。所以它只是在UI上显示的内容不正确。

我还尝试使用标准的stackpanel而不是virtualstackpanel,并通过确保所有项目都加载到内存中来解决问题。

我不相信删除虚拟化就是答案。必须有根本原因。但是,这可能是可以接受的,因为我的列表框永远不会包含超过30个项目。

在另一个页面上,我使用silverlight工具包longlistselector做同样的事情,并且有同样的问题。但是我不确定如何删除longlistselector上的虚拟化。

总而言之,导致列表框项目在滚动时无法正确更新UI的根本问题是什么?如果删除虚拟化是唯一的答案,我如何在longlistselector上执行此操作?

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

可能是某种this问题? (滚动时跳转列表框)

答案 1 :(得分:1)

事实证明,这是一个具有约束力的问题,与列表框无关。

我(在不知不觉中)删除了项目模板中某些属性的绑定,在我绑定它们之后(在其他一些代码中)因此每次listbox为新项目回收容器时,它都无法更新它正确的信息。

感谢大家的帮助