【问题标题】:WP7 Listbox items out of sync when scrolling滚动时 WP7 列表框项目不同步
【发布时间】:2012-05-01 13:22:20
【问题描述】:

我有一个页面,其中有一个列表框,其项目模板如下:

<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 上显示的内容不正确。

我还尝试过明确地使用标准堆栈面板而不是虚拟化堆栈面板,并且通过确保所有项目都加载到内存中来解决这个问题。

我不认为移除虚拟化是解决之道。必须有一个根本原因。不过这可能是可以接受的,因为我的列表框永远不会真正包含超过 30 个项目。

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

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

感谢您对此的任何帮助。

【问题讨论】:

  • 这是在模拟器上还是在真正的 WP7 设备上?我在模拟器上看到了许多视觉故障。
  • 我应该提到的另一件事是,如果我将包含网格中的最大高度更改为
  • 根据您的描述,这听起来像是一个绑定问题。你有复制品吗?

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


【解决方案1】:

也许是某种this 问题? (滚动时跳转 ListBox)

【讨论】:

  • 跳跃列表问题是因为您正在虚拟化不同大小的项目。当不同的项目移入和移出列表时,列表框必须调整为不同的大小。还有其他基于测量和设置项目大小的解决方法,但我也很想进一步研究您的解决方案。
  • 这是一个很奇怪的问题,博客中的解决方案确实适用于描述的问题(视频)......因此我认为这是ListBox实现中的一个错误......
【解决方案2】:

事实证明,这是一个绑定问题,与列表框无关。

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

感谢大家的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多