我有一个顶级应用栏客户用户控件,用于在我的WinRt MvvmLight应用程序中导航。此自定义控件已添加到我的所有页面
TopAppBar用户控制
<AppBarButton
x:Uid="HomeTopAppBar"
Command="{Binding HomeCommand}"
Icon="Home"/>
<AppBarButton
x:Uid="LibraryTopAppBar"
Command="{Binding LibraryCommand}"
Icon="Library"/>
这些命令被添加到我的所有ViewModel中。例如,
HomeViewModel
public RelayCommand LibraryCommand {
get {
return new RelayCommand(
() => _navigationService.Navigate(typeof(LibraryPage)));
}
}
public RelayCommand HomeCommand {
get {
return new RelayCommand(
() => _navigationService.Navigate(typeof(HomePage)));
}
}
我遇到的问题是,如果用户使用顶部应用栏,则第一次点击有效(即,用户导航到正确的页面。)在第二次单击时,程序在OnNavigatedFrom上的NavigationHelper中崩溃方法(取自MvvmLight)。程序抱怨_pageKey为null。有什么东西我做错了吗?用户如何从App Bar导航到其他页面?
答案 0 :(得分:0)
我决定使用点击事件,而不是在我的Appbar中添加命令。之所以这样做是因为通过使用该命令,每个使用我的appbar的viewmodel都需要创建该命令。这是我的解决方案:
<强> TopAppBar.xaml 强>
<AppBarButton
x:Uid="HomeTopAppBar"
Click="AppBarButton_Home"
Icon="Home"/>
<AppBarButton
x:Uid="LibraryTopAppBar"
Click="AppBarButton_Library"
Icon="Library"/>
<强> TopAppBar.xaml.cs 强>
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));
}
从Appbar(例如主页)导航到的任何页面
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);
}
}