3

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

<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线程也会受到影响。页面已加载,但您无法对其执行任何操作,例如在数据绑定完成之前滑动。在那之后,手势仍然滞后。

4

1 回答 1

0

加载问题可能是因为 ItemsSource 很大。您可以尝试在您的应用程序中执行增量滚动(ISupportIncrementalLoading)。最初加载较少的项目并按需加载剩余的项目。

于 2014-03-19T13:21:59.907 回答