我有一些类似的代码:
<FlipView UseTouchAnimationsForAllNavigation="False" ItemsSource="{Binding Records}" SelectedItem="{Binding Record, Mode=TwoWay}">
<FlipView.ItemTemplate>
<DataTemplate x:DataType="Models:Record">
<TextBlock x:Name="debugText" Text="{x:Bind Name}" />
<UC:MyControl Record="{x:Bind Mode=OneWay, Converter={StaticResource myConverter}}" />
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
MyControl
需要使用myConverter
转换日期,然后显示Record的详细信息。它显示图像,名称等。
TextBlock
debugText
是为了调试目的而创建的。
当我手动或按代码移动FlipView
时,元素正在正确转换。我可以调试SelectedItem
如何正确更新,我可以正确看到debugText
更新。
但出于某种原因,MyControl
在第一项之间循环。它只显示3或4个第一项,在到达第3或第4项后,它再次显示第一项。我调试转换器myConverter
,我可以看到它被加载视图3或4次。但是,即使我转换到下一个元素,它也不会被调用。
在UseTouchAnimationsForAllNavigation="False"
时仅显示3个第一个元素,在UseTouchAnimationsForAllNavigation="True"
时显示4个第一个元素。
通过撰写FlipView.ItemsPanel
:
<FlipView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel AreScrollSnapPointsRegular="True" Orientation="Horizontal" />
</ItemsPanelTemplate>
</FlipView.ItemsPanel>
但它不是我的解决方案,因为有很多Records
(可能超过300),并且以这种方式完成页面加载需要很长时间,浪费了太多内存。当我在手机中以此模式运行时,应用程序甚至会在有许多记录时崩溃。
如何让它超过3或4个第一项呢?