我有一个页面,其中只有一个支点。该页面始终被缓存。现在,每当我导航到此页面时,我都希望从缓存中加载其内容和选择,但我希望PivotItem查看第一个。XAML:
<Pivot x:Name="FilterPivot"
IsHeaderItemsCarouselEnabled="True"
SelectedIndex="0">
<PivotItem Header="Author" >
<ListBox ItemsSource="{x:Bind AuthorFacets, Mode=OneWay}"
Name="AuthorListBox"
SelectionMode="Multiple"
SelectionChanged="AuthorListBox_SelectionChanged">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate x:DataType="local:IFacet">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="{x:Bind read}"
TextWrapping="Wrap"
HorizontalAlignment="Left"
VerticalAlignment="Center"/>
<Border Grid.Column="1"
Background="Gray"
MinWidth="25"
CornerRadius="8">
<TextBlock Text="{x:Bind num}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Padding="2"/>
</Border>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</PivotItem>
<PivotItem Header="Language">
....
....
</PivotItem>
<PivotItem Header="Learning Resource Type">
....
....
</PivotItem>
<PivotItem Header="Subject">
....
....
</PivotItem>
<PivotItem Header="Type">
....
....
</PivotItem>
<PivotItem Header="Education Level">
....
....
</PivotItem>
<PivotItem Header="Source">
....
....
</PivotItem>
</Pivot>
Run Code Online (Sandbox Code Playgroud)
这是我背后的代码:
public FilterPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
FilterPivot.SelectedIndex = 0;
}
Run Code Online (Sandbox Code Playgroud)
这不会选择第 0 个索引,而是显示PivotItem当用户离开视图时选择的缓存。
在OnNavigatedTo将被调用之前的Pivot甚至被加载控制,所以设置SelectedIndex不会影响其选择。
简单的解决方法是订阅Loaded事件并从那里设置它。
只需在您MainPage的构造函数中执行以下操作-
FilterPivot.Loaded += (s, e) => FilterPivot.SelectedIndex = 0;
Run Code Online (Sandbox Code Playgroud)