UWP:如何记录PivotItem的显示事件

时间:2017-02-02 13:44:58

标签: xaml uwp pivot latency pivotitem

我在包含 Pivot 5 PivotItems 的屏幕上遇到“延迟”问题。这些问题仅出现第一次显示第3次和第4次数据透视表项目。当我回到这些PivotItems,或者如果我选择其他PivotItems时,我不会遇到相同的“延迟”......

enter image description here

我试着了解这个问题出在哪里,所以我在PivotItems上添加了一些事件已加载正在加载的GotFocus 即可。在我的日志中,我看到在显示页面后调用了Loaded和Loading,但只有在聚焦PivotItem中的项目时才调用GotFocus。

我还使用 Pivot 上的 SelectedIndex ,但这无法帮助我理解为什么我会遇到2个PivotItem的延迟......

所显示表单的所有数据都是通过 LoadDatas()方法从 SQLite数据库加载的:所以当我浏览数据透视表时,数据已经加载。在我的日志中,我发现在构造函数中加载数据后,可以很好地调用加载已加载

11.07.18.615885 : HomeViewModel - OpenForm()
11.07.18.662764 : DetailsViewModel - Ctor() - start
11.07.18.662764 : DetailsViewModel - LoadDatas() - start
11.07.18.803396 : DetailsViewModel - LoadDatas() - end
11.07.18.803396 : DetailsViewModel - Ctor() - end
11.07.19.053413 : DetailsPage - PivotItem_Loading() - DetailsGeneralPivotItem
11.07.19.053413 : DetailsPage - PivotItem_Loading() - DetailsMachinePivotItem
11.07.19.069042 : DetailsPage - PivotItem_Loading() - DetailsComponentPivotItem
11.07.19.069042 : DetailsPage - PivotItem_Loading() - DetailsFormPartsPivotItem
11.07.19.069042 : DetailsPage - PivotItem_Loading() - DetailsFeedbacksPivotItem
11.07.19.287811 : DetailsPage - PivotItem_Loaded() - DetailsGeneralPivotItem
11.07.19.287811 : DetailsPage - PivotItem_Loaded() - DetailsMachinePivotItem
11.07.19.287811 : DetailsPage - PivotItem_Loaded() - DetailsComponentPivotItem
11.07.19.303432 : DetailsPage - PivotItem_Loaded() - DetailsFormPartsPivotItem
11.07.19.303432 : DetailsPage - PivotItem_Loaded() - DetailsFeedbacksPivotItem

关注延迟问题的第3个PivotItem的XAML看起来像这样:

<Pivot x:Name="Pivot"
       SelectedIndex="{Binding SelectedIndexPivot, Mode=TwoWay}"
       Opacity="{Binding IsBusy, Converter={StaticResource ActivityToOpacityConverter}}"
       IsEnabled="{Binding IsBusy, Converter={StaticResource InvertedBoolConverter}}">

    <!-- 1. General / 2. Machine -->
    ...
    <!-- 3. Component -->
    <PivotItem x:Uid="DetailsComponentPivotItem"
               x:Name="DetailsComponentPivotItem"
               Loaded="PivotItem_Loaded"
               Loading="PivotItem_Loading">
        <ScrollViewer VerticalScrollBarVisibility="Hidden"
                      VerticalScrollMode="Auto">
            <StackPanel>
                ...
                <Grid Grid.Row="0">
                    ...
                    <!-- Component Order -->
                    <StackPanel Orientation="Vertical" Grid.Row="0" Grid.Column="0" Margin="4,8,20,0" >
                        <TextBlock x:Uid="DetailsComponentTextBlockComponentOrder" />
                        <AutoSuggestBox x:Uid="DetailsComponentAsbComponentOrder"
                                    Name="DetailsComponentAsbComponentOrder"
                                    ItemsSource="{x:Bind ViewModel.VComponentOrders}"
                                    DisplayMemberPath="component_order"
                                    TextMemberPath="component_order"
                                    QueryIcon="Find"
                                    Text="{Binding CarForm.component_order, Mode=TwoWay, Converter={StaticResource StringToNullableIntConverter}}"
                                    TextChanged="asbTextChanged"
                                    QuerySubmitted="asbQuerySubmitted"
                                    SuggestionChosen="asbSuggestionChosen" />
                    </StackPanel>
                    <!-- Component Order Type -->
                    <StackPanel Orientation="Vertical" Grid.Row="0" Grid.Column="1" Margin="4,8,20,0" >
                        <TextBlock x:Uid="DetailsComponentTextBlockComponentOrderType" />
                        <ComboBox ItemsSource="{x:Bind ViewModel.ComponentOrderType}"
                                  SelectedItem="{Binding SelectedComponentOrderType, Mode=TwoWay}"
                                  HorizontalAlignment="Stretch" />
                    </StackPanel>
                    ...                         
                    <!-- Hours -->
                    <StackPanel Orientation="Vertical" Grid.Row="1" Grid.Column="2" Margin="4,8,20,0" >
                        <TextBlock x:Uid="DetailsComponentTextBlockComponentHours" />
                        <input:SfNumericTextBox FormatString="N0"
                                                Value="{Binding CarForm.component_hour, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                                MaximumNumberDecimalDigits="0"
                                                Style="{StaticResource NumericTextBoxStyle}" />
                    </StackPanel>
                </Grid>
                ...                     
                <Grid Margin="4,8,20,0">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="*" />
                    </Grid.RowDefinitions>
                    <TextBlock x:Uid="DetailsComponentTextBlockComponentPhotos" Grid.Row="0"/>
                    <GridView ItemsSource="{x:Bind ViewModel.CarForm.images}"
                              IsItemClickEnabled="True"
                              SelectionMode="Single"
                              Grid.Row="1">
                        <i:Interaction.Behaviors>
                            <core:EventTriggerBehavior EventName="ItemClick">
                                <core:InvokeCommandAction Command="{Binding PhotoItemClickedCommand}" />
                            </core:EventTriggerBehavior>
                        </i:Interaction.Behaviors>
                        <GridView.FooterTemplate>
                            <DataTemplate>
                                <CommandBar Background="White">
                                    <CommandBar.Content>
                                        <AppBarButton x:Uid="DetailsComponentButtonAddPhoto"
                                                      Icon="Add"
                                                      Command="{Binding AddPhotoCommand}" />
                                    </CommandBar.Content>
                                </CommandBar>
                            </DataTemplate>
                        </GridView.FooterTemplate>
                    </GridView>
                </Grid>
            </StackPanel>
        </ScrollViewer>
    </PivotItem>
    <!-- 4. Parts / 5. Feedbacks -->
    ...            
</Pivot>

这个PivotItem包含很多字段:

  • AutoSuggestBox
  • 文本框
  • 组合框
  • Syncfusion NumericTextBox
  • GridView 带照片列表

我已经尝试从“ {Binding ...} ”迁移到“ {x:Bind ...} ”,但我遇到了一些问题组件:ComboBox,Syncfusion NumericTextBox。所以我目前在我的页面中混合了这两个绑定。

我还尝试删除GridView 块,但延迟始终存在。

=&GT;你有什么解释吗?在PivotItem的节目中调用哪些事件?有没有办法通过XAML解决这个问题? (使用“x:DeferLoadStrategy”或其他方式)

0 个答案:

没有答案