我有一个页面,其中有一个带有以下项目模板的列表框,如下所示:
<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 上执行此操作?
感谢您对此的任何帮助。