我一直在试图弄清楚如何提高我的数据透视控件的性能,它有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线程也会受到影响。页面已加载但您无法像在数据绑定完成之前滑动一样。然后手势仍然滞后。
答案 0 :(得分:0)
加载问题可能是因为一个巨大的ItemsSource。您可以尝试在应用中执行增量滚动(ISupportIncrementalLoading)。最初装载较少的物品并按需装载剩余物品。