Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用带有MvvmLight、WinRt的AppBar导航到页面_C#_Windows Store Apps_Mvvm Light - Fatal编程技术网

C# 使用带有MvvmLight、WinRt的AppBar导航到页面

C# 使用带有MvvmLight、WinRt的AppBar导航到页面,c#,windows-store-apps,mvvm-light,C#,Windows Store Apps,Mvvm Light,我有一个顶部应用程序栏客户用户控件,用于在我的WinRt MvvmLight应用程序中导航。此自定义控件已添加到“我的所有页面” TopAppBar用户控件 我遇到的问题是,如果用户使用顶部的应用程序栏,第一次单击就起作用,即用户被导航到正确的页面。在第二次单击时,程序在从MvvmLight获取的OnNavigatedFrom方法的NavigationHelper中崩溃。程序抱怨_pageKey为空。有什么我做得不对吗?用户如何从应用程序栏导航到其他页面?我决定使用单击事件,而不是在我的应用程序

我有一个顶部应用程序栏客户用户控件,用于在我的WinRt MvvmLight应用程序中导航。此自定义控件已添加到“我的所有页面”

TopAppBar用户控件


我遇到的问题是,如果用户使用顶部的应用程序栏,第一次单击就起作用,即用户被导航到正确的页面。在第二次单击时,程序在从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);
  }

}