包含带有数据绑定的ListBox的PivotItem滑动手势的性能问题

时间:2013-02-05 20:37:41

标签: c# silverlight xaml windows-phone

我一直在试图弄清楚如何提高我的数据透视控件的性能,它有4个PivotItem,每个数据集都有C#中的数据绑定列表框。使用BackgroundWorker减少了加载时间,但即使执行了所有后台任务,前两次滑动也总是滞后。 4秒的滞后是不可接受的。我认为它可能是由listbox itemtemplate引起的,如下所示:

<DataTemplate x:Key="MetroList">
  <Grid MinHeight="120">
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="190"/>
      <ColumnDefinition Width="32"/>
      <ColumnDefinition Width="230"/>
    </Grid.ColumnDefinitions>
    <ListBox Width="190"  ScrollViewer.VerticalScrollBarVisibility="Disabled" ItemsSource="{Binding connectingLines}" FlowDirection="RightToLeft" Margin="0,12" VerticalAlignment="Center">
      <ListBox.ItemTemplate>
        <DataTemplate>
          <Grid Margin="6,0,0,6">
            <Rectangle Fill="{Binding LineColor}" RadiusX="3" RadiusY="3"/>
            <TextBlock Text="{Binding LineNumber}" FontWeight="Bold" Padding="8,0" FontSize="24" Margin="0,5,0,3" MinWidth="50" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
          </Grid>
        </DataTemplate>
      </ListBox.ItemTemplate>

      <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
          <toolkit:WrapPanel/>
        </ItemsPanelTemplate>
      </ListBox.ItemsPanel>
    </ListBox>
    <Ellipse Width="20"
      Height="20"
      Fill="White"
      StrokeThickness="3"
      Stroke="#FF222378"
                 HorizontalAlignment="Left"
                 VerticalAlignment="Center"
                 Margin="6,0,0,0"
                 Grid.Column="1"/>
    <Rectangle Fill="#FF222378"
      Width="8"
      Height="3"
                   Grid.Column="1"
                   HorizontalAlignment="Right"
      VerticalAlignment="Center" Margin="-1,0,0,0" />
    <TextBlock
            TextWrapping="Wrap"
      Text="{Binding stopName}"
      FontFamily="Segoe WP Semibold"
      FontWeight="Bold"
      Foreground="#1E1B6E"
      x:Name="StationName"
      FontSize="32"
      Width="200"
      VerticalAlignment="Center"
      Margin="12,6,0,10"
      LineHeight="32"
            Tag="{Binding stopId}"
            Tap="StationName_Tap"
            Grid.Column="2"
                        />
  </Grid>
</DataTemplate>

我已经尝试取消ListBox,因为它是在应用程序出现性能问题之前最近添加的。但它只能将滞后时间缩短几毫秒。我还尝试将VirtualizingStackPanel.VirtualizationMode设置为回收,以防万一,但没有做任何事情。我能做些什么来改善用户体验?我听说在需要时加载PivotItem内容但是从谷歌找不到任何有用的东西,因为大多数文章都使用pivot.loadedpivotitem或pivotitem.loaded事件,两者都没有帮助消除滞后。


编辑:我意识到即使后台线程正在工作,ui线程也会受到影响。页面已加载但您无法像在数据绑定完成之前滑动一样。然后手势仍然滞后。

1 个答案:

答案 0 :(得分:0)

加载问题可能是因为一个巨大的ItemsSource。您可以尝试在应用中执行增量滚动(ISupportIncrementalLoading)。最初装载较少的物品并按需装载剩余物品。