LongListSelector在滚动之后不会显示所有项目

时间:2014-06-05 07:21:24

标签: wpf silverlight xaml windows-phone-8 longlistselector

我试图在LongListSelector中显示大约1400个项目。虽然它正确地显示了项目,但有时候,当我如此快速地向下滚动到底部然后开始向上滚动时,它并没有显示所有项目,尽管绑定收集的内容没有改变,但它几乎没有显示100项后端。

这是我的UI代码:

<phone:PanoramaItem Header="Monitors" Margin="{StaticResource PanoramaItemMargin}" HeaderTemplate="{StaticResource PanoramaItemHeaderTemplate}">
                <phone:LongListSelector ItemsSource="{Binding MonitorRenderList}" VirtualizingStackPanel.VirtualizationMode="Recycling" Margin="-15,-15,0,0">
                    <phone:LongListSelector.ItemTemplate>
                        <DataTemplate>
                            <common:MonitorListTemplateSelector Content="{Binding}" HorizontalAlignment="Left">
                                <common:MonitorListTemplateSelector.MonitorBucket>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding titleUpperCase}" Margin="0,5,10,5" FontWeight="Bold" Foreground="{StaticResource AppForegroundHighlightTextBrush}" TextWrapping="NoWrap" TextTrimming="WordEllipsis" FontSize="{StaticResource RowHeaderFontSize}"/>
                                    </DataTemplate>
                                </common:MonitorListTemplateSelector.MonitorBucket>
                                <common:MonitorListTemplateSelector.MonitorDetails>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding monitorName}" Margin="0,5,10,5" FontSize="{StaticResource TextRowFontSize}" Foreground="{StaticResource AppForegroundNormalTextBrush}" TextWrapping="NoWrap" TextTrimming="WordEllipsis">
                                            <i:Interaction.Triggers>
                                                <i:EventTrigger EventName="Tap">
                                                    <i:InvokeCommandAction Command="{Binding DataContext.SelectedMonitorDetailsCommand, ElementName=LandingPageRoot, Mode=OneTime}" CommandParameter="{Binding}"/>
                                                </i:EventTrigger>
                                            </i:Interaction.Triggers>
                                        </TextBlock>
                                    </DataTemplate>
                                </common:MonitorListTemplateSelector.MonitorDetails>
                                <common:MonitorListTemplateSelector.EmptyLastItem>
                                    <DataTemplate>
                                        <TextBlock Height="72" />
                                    </DataTemplate>
                                </common:MonitorListTemplateSelector.EmptyLastItem>
                            </common:MonitorListTemplateSelector>
                        </DataTemplate>
                    </phone:LongListSelector.ItemTemplate>
                </phone:LongListSelector>
            </phone:PanoramaItem>

编辑:只有当LongListSelector中包含Panorama时,即使只有一个panoramaItem,但是当我移动它时,似乎也会出现此问题在全景之外,它并没有发生。

2 个答案:

答案 0 :(得分:1)

Windows Phone的每个Silverlight控件都有大小限制。它可以在宽度和高度上显示最多2048个像素。

由于这个原因,您的问题可能会发生。你检查过了吗?

答案 1 :(得分:1)

这是正常行为,它是由控件的内置虚拟化引起的。当数据绑定集合太大时,虚拟化就会启动,以保持控件的性能不变。

如果没有UI虚拟化,整个数据集将保留在内存中,并且会为列表中的每个项目创建一个项容器,从而削弱应用程序的性能,并可能抛出将终止它的OutOfMemoryException。 p>

使用UI虚拟化,数据集仍保留在内存中,但只有当项目几乎准备好在UI中显示时,才会创建项容器,从而保持较低的内存消耗。

默认情况下,所有项目控件都启用UI虚拟化。

修改

取自Daniel Vaughan的 - Windows Phone 8 Unleashed,SAMS Publishing

  

由于Panorama旨在诱使用户进行探索,因此它应该显示内容   有趣且具体的用户。用户也不应该过多负担   内容;认为空格和没有数据负载。全景应该被认为是   一个起始位置,包含将用户带到更详细页面的数据和链接   内容,例如可能包含Pivot的页面。然后用户可以离开   全景的探索风格,为更加专注的Pivot风格。

也来自此链接:http://ux.artu.tv/?p=234

  

全景图无法容纳大量数据。出于性能和体验原因,如果您需要为用户提供大量内容,请不要使用全景图。多少是太多了?一般留在3到5个全景面板内。使用最多使用15-20个项目的ListBox。全景图不是虚拟化的(内存管理),因此将它们看作几乎与动态内容控件(如Pivots)一样大的平面图像。再一次,它们更像是杂志封面 - 美丽而身临其境。