C# 使用带有MvvmLight、WinRt的AppBar导航到页面
我有一个顶部应用程序栏客户用户控件,用于在我的WinRt MvvmLight应用程序中导航。此自定义控件已添加到“我的所有页面” TopAppBar用户控件C# 使用带有MvvmLight、WinRt的AppBar导航到页面,c#,windows-store-apps,mvvm-light,C#,Windows Store Apps,Mvvm Light,我有一个顶部应用程序栏客户用户控件,用于在我的WinRt MvvmLight应用程序中导航。此自定义控件已添加到“我的所有页面” TopAppBar用户控件 我遇到的问题是,如果用户使用顶部的应用程序栏,第一次单击就起作用,即用户被导航到正确的页面。在第二次单击时,程序在从MvvmLight获取的OnNavigatedFrom方法的NavigationHelper中崩溃。程序抱怨_pageKey为空。有什么我做得不对吗?用户如何从应用程序栏导航到其他页面?我决定使用单击事件,而不是在我的应用程序
我遇到的问题是,如果用户使用顶部的应用程序栏,第一次单击就起作用,即用户被导航到正确的页面。在第二次单击时,程序在从MvvmLight获取的OnNavigatedFrom方法的NavigationHelper中崩溃。程序抱怨_pageKey为空。有什么我做得不对吗?用户如何从应用程序栏导航到其他页面?我决定使用单击事件,而不是在我的应用程序栏中添加命令。之所以这样做,是因为通过使用该命令,使用appbar的每个viewmodel都需要创建该命令。以下是我的解决方案: TopAppBar.xaml
<AppBarButton
x:Uid="HomeTopAppBar"
Command="{Binding HomeCommand}"
Icon="Home"/>
<AppBarButton
x:Uid="LibraryTopAppBar"
Command="{Binding LibraryCommand}"
Icon="Library"/>
public RelayCommand LibraryCommand {
get {
return new RelayCommand(
() => _navigationService.Navigate(typeof(LibraryPage)));
}
}
public RelayCommand HomeCommand {
get {
return new RelayCommand(
() => _navigationService.Navigate(typeof(HomePage)));
}
}
<AppBarButton
x:Uid="HomeTopAppBar"
Click="AppBarButton_Home"
Icon="Home"/>
<AppBarButton
x:Uid="LibraryTopAppBar"
Click="AppBarButton_Library"
Icon="Library"/>
private void AppBarButton_Home(object sender, RoutedEventArgs e) {
SimpleIoc.Default.GetInstance<INavigationService>().Navigate(typeof(HomePage));
}
private void AppBarButton_Library(object sender, RoutedEventArgs e) {
SimpleIoc.Default.GetInstance<INavigationService>().Navigate(typeof(LibraryPage));
}
public sealed partial class HomePage {
public HomePage() {
InitializeComponent();
}
public HomeViewModel ViewModel {
get {
return (HomeViewModel)DataContext;
}
}
//needed for navigation
protected override void OnNavigatedTo(NavigationEventArgs e) {
base.OnNavigatedTo(e);
}
//needed for navigation
protected override void OnNavigatedFrom(NavigationEventArgs e) {
base.OnNavigatedFrom(e);
}
}