我在包含Pivot和5 PivotItems的屏幕上遇到“延迟”问题。这些问题仅在第 3 和第 4 个 PivotItems 显示后第一次出现。当我回到这些 PivotItems 时,或者如果我选择其他 PivotItems 我没有遇到相同的“延迟”......
我试图了解这个问题出在哪里,所以我在 PivotItems 上添加了一些事件: Loaded、Loading和GotFocus。在我的日志中,我看到在显示页面后很好地调用了 Loaded 和 Loading,但只有在 PivotItem 中的项目获得焦点时才会调用 GotFocus。
我还在Pivot上使用SelectedIndex,但这并不能帮助我理解为什么我会遇到 2 个 PivotItems 的延迟......
显示表单的所有数据都是通过LoadDatas()方法从SQLite 数据库加载的:所以当我浏览 PivotItems 时,数据已经加载。在我的日志中,我看到在构造函数中加载数据后很好地调用了Loading或Loaded :
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 包含很多字段:
- 自动建议框
- 文本框
- 组合框
- Syncfusion 数字文本框
- 带有照片列表的GridView
我已经尝试从“ {Binding ...} ”迁移到“ {x:Bind ...} ”,但我遇到了一些组件的问题:ComboBox、Syncfusion NumericTextBox。所以我目前在我的页面中混合了这两个绑定。
我也尝试删除 GridView块,但延迟始终存在。
=> 你有什么解释吗?显示 PivotItem 时会调用哪些事件?有没有办法通过 XAML 解决这个问题?(使用“x:DeferLoadStrategy”或其他方式)