UWP NavigationView通过MVVM切换到另一个页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UWP NavigationView通过MVVM切换到另一个页面相关的知识,希望对你有一定的参考价值。
从WPF到UWP的第一次切换我发现在UWP世界中存在像SplitView
和NavgiationView
这样的伟大控件。
为了更新我当前的家庭项目,我选择了NavigationView
控件作为我的主要UI控件来提供各种信息。使用代码隐藏页面导航(as shown here)非常简单,但对于我的用例,我想使用MVVM(作为学习过程而不使用像MVVMLIght或类似的FW)。
目前,我的NavigationView
看起来像这样;但我还没有正确的想法如何通过页面在框架内进行更改(从我的理解,我必须使用NavigationService
,但没有找到一个易于理解的例子):
<NavigationView x:Name="nvTopLevelNav" Grid.Column="0" Grid.Row="1" Grid.RowSpan="3" IsPaneOpen="False" IsPaneToggleButtonVisible="False" CompactModeThresholdWidth="0" IsBackButtonVisible="Collapsed" Background="Black" Foreground="Black"
Loaded="nvTopLevelNav_Loaded"
Margin="0,12,0,0"
SelectionChanged="nvTopLevelNav_SelectionChanged"
ItemInvoked="nvTopLevelNav_ItemInvoked"
IsTabStop="False"
IsSettingsVisible="False"
AlwaysShowHeader="False"
Header="asdasdaasdasdasd">
<NavigationView.MenuItems>
<NavigationViewItem Icon="Home" Content="Home" Tag="Home_Page" />
<NavigationViewItem Icon="Globe" Content="Weather" Tag="Weather_Page" />
<NavigationViewItem Content="My Agenda" Tag="Agenda_Page">
<!-- some custom PathIcon -->
</NavigationViewItem>
<NavigationViewItem Icon="Contact" Content="My News" Tag="News_Page" />
</NavigationView.MenuItems>
<Frame x:Name="contentFrame"></Frame>
</NavigationView>
答案
UWP NavigationView通过MVVM切换到另一个页面
根据您的要求,您可以使用Windows Template Studio
创建包含MVVM模式和NavigationService
的UWP项目。
private void OnItemInvoked(NavigationViewItemInvokedEventArgs args)
{
if (args.IsSettingsInvoked)
{
NavigationService.Navigate(typeof(SettingsViewModel).FullName);
return;
}
var item = _navigationView.MenuItems
.OfType<NavigationViewItem>()
.First(menuItem => (string)menuItem.Content == (string)args.InvokedItem);
var pageKey = item.GetValue(NavHelper.NavigateToProperty) as string;
NavigationService.Navigate(pageKey);
}
以上是关于UWP NavigationView通过MVVM切换到另一个页面的主要内容,如果未能解决你的问题,请参考以下文章
UWP NavigationView 和 TabView 冲突
UWP NavigationView 如何取消 NavigationViewSelectionChangedEventArgs