【发布时间】:2019-09-12 05:03:09
【问题描述】:
我已经阅读了多篇关于使用 prism 进行导航和传递参数的文章。但是,我尝试的任何方法都不会在更改页面时触发 OnNavigatingTo 方法。
我的目标是将一个简单的参数从 LoginPage 传递到 MultifactorAuthPage。
如果我尝试在 OnNavigatingTo 方法中获取参数,您的应用将不会因某种原因更改页面。它将到达断点并停留在 LoginPage 上。
我目前正在使用 Xamarin Forms 3.6 和 Prism 7.1。
这是我的一些代码:
LoginPageViewModel
public LoginPageViewModel(INavigationService navigationService, IPushNotification pushNotification)
{
_navigationService = navigationService;
LoginCommand = new DelegateCommand(BeginLoginAsync);
}
private async void BeginLoginAsync()
{
await _navigationService.NavigateAsync("MultifactorAuthPage", new NavigationParameters("PhoneNumber=9999999999"));
}
MultifactorAuthViewModel
public class MultifactorAuthPageViewModel : ViewModelBase, INavigationAware
{
INavigationService _navigationService;
public MultifactorAuthPageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
}
private override void OnNavigatingTo(INavigationParameters parameters)
{
}
private override void OnNavigatedFrom(INavigationParameters parameters)
{
}
private override void OnNavigatedTo(INavigationParameters parameters)
{
PhoneNumber = Convert.ToInt32(parameters["PhoneNumber"]);
}
}
ViewModelBase
public class ViewModelBase : BindableBase, INavigationAware
{
public ViewModelBase()
{
}
public virtual void OnNavigatedFrom(INavigationParameters parameters)
{
}
public virtual void OnNavigatedTo(INavigationParameters parameters)
{
}
public virtual void OnNavigatingTo(INavigationParameters parameters)
{
}
}
我尝试过的一些资源:
https://prismlibrary.github.io/docs/xamarin-forms/navigation/passing-parameters.html https://xamgirl.com/prism-in-xamarin-forms-step-by-step-part-2/ https://github.com/PrismLibrary/Prism-Samples-Forms/tree/master/ContosoCookbook
【问题讨论】:
-
您是否在做任何自定义的事情,例如向 DI 容器注册 INavigationService?从我所看到的情况来看,我的设置和你的设置之间的唯一区别是我将 INavigationService 向下传递到基本构造函数中,并将其作为 ViewModelBase 上的受保护属性。
-
我不这么认为。我的注册类型中有这个: containerRegistry.RegisterForNavigation
();我在 App.cs 中执行此操作:await NavigationService.NavigateAsync("NavigationPage/LoginPage"); -
您是否使用
containerRegistry.RegisterForNavigation<LoginPage, LoginPageViewModel>("LoginPage")注册了其他页面进行导航 -
是的。我创建了一个新的示例项目并且代码有效。我不确定我的项目中的断开连接在哪里。
标签: c# xamarin mvvm xamarin.forms prism