导航到其他框架(UWP)时如何更改选定的导航视图项?

How to change selected navigation view item when navigating to other frames(UWP)?

我有一个 UWP,其 MainPageNavigationView

<NavigationView x:Name="MyNavigationView"
                ItemInvoked="MyNavigationView_OnItemInvoked"
                >

    <NavigationView.MenuItems>
        <NavigationViewItem Icon="List" Content="Channels" Tag="channels"/>
        <NavigationViewItem Icon="Video" Content="Player" Tag="player"/>
    </NavigationView.MenuItems>

    <Frame x:Name="MyFrame">
        <Frame.ContentTransitions>
            <TransitionCollection>
                <NavigationThemeTransition/>
            </TransitionCollection>
        </Frame.ContentTransitions>
    </Frame>

</NavigationView>

如您所见,另外两帧是ChannelsPagePlayerPage。我在 ChannelsPage 中列出了一些频道,通过单击一个项目,框架将导航到 PlayerPage:

private void EachTvProgram_Click(object sender, ItemClickEventArgs e)
    {
        var nextPlaying = (TvProgram) e.ClickedItem;
        TvProgramManager.PlayingProgram = nextPlaying.Title;

        ChannelDetails.IsPaneOpen = false;
        Frame.Navigate(typeof(PlayerPage));
    }

虽然页面导航正确,但NavigationView.MenuItem中的SelectedItem仍然是Channels,如何在函数中将其更改为Player

解释图片在这里:explanation image

如您所见,框架实际上是 PlayerPageSelectedItemChannelsPage

您可以创建一个 public 方法来设置 NavigationViewSelectedItem

MainPage.xaml.cs中:

public void SetSelectedNavigationItem(int index)
{
    MyNavigationView.SelectedItem = MyNavigationView.MenuItems[index];
}

导航到 PlayerPage 后,您可以执行以下操作:

Frame appFrame = Window.Current.Content as Frame;
MainPage mainPage = appFrame.Content as MainPage;
mainPage.SetSelectedNavigationItem( 1 );

当然最好能更简单地访问主页,比如在MainPage上创建一个static方法:

public static MainPage GetCurrent()
{
    Frame appFrame = Window.Current.Content as Frame;
    return appFrame.Content as MainPage;
}

另一个改进是创建一个枚举来替换 "magical" 索引整数。