我在包含 Pivot 和 5 PivotItems 的屏幕上遇到“延迟”问题。这些问题仅出现第一次显示第3次和第4次数据透视表项目。当我回到这些PivotItems,或者如果我选择其他PivotItems时,我不会遇到相同的“延迟”......
我试着了解这个问题出在哪里,所以我在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包含很多字段:
我已经尝试从“ {Binding ...} ”迁移到“ {x:Bind ...} ”,但我遇到了一些问题组件:ComboBox,Syncfusion NumericTextBox。所以我目前在我的页面中混合了这两个绑定。
我还尝试删除GridView 块,但延迟始终存在。
=&GT;你有什么解释吗?在PivotItem的节目中调用哪些事件?有没有办法通过XAML解决这个问题? (使用“x:DeferLoadStrategy”或其他方式)