gpt4 book ai didi

c# - 在XF Prism 7中不触发

转载 作者:行者123 更新时间:2023-12-03 10:42:05 24 4
gpt4 key购买 nike

我已经看过多篇有关导航和如何通过 Prism 传递参数的文章。但是,更改页面时,我尝试执行的任何操作都不会触发OnNavigatingTo方法。

我的目标是将一个简单的参数从LoginPage传递到MultifactorAuthPage。

如果我尝试在OnNavigatingTo方法中获取参数,则由于某些原因,您的应用程序将不会更改页面。它将达到断点,并停留在LoginPage上。

我目前正在使用带有Prism 7.1的Xamarin Forms 3.6。

这是我的一些代码:

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

最佳答案

您的BeginLoginAsync方法显然是异步的。因此,您还需要实例化命令以使其异步。试试这个:

public LoginPageViewModel(INavigationService navigationService, IPushNotification pushNotification)
{
_navigationService = navigationService;
LoginCommand = new DelegateCommand(async () => await BeginLoginAsync());
}

同样,您需要更改 BeginLoginAsync方法以返回 Task而不是 void
private async Task BeginLoginAsync()
{
await _navigationService.NavigateAsync("MultifactorAuthPage", new NavigationParameters("PhoneNumber=9999999999"));
}

那你应该没事的。

编辑:
如果您必须等待并且不要忘记 调用基本方法,也可以尝试将此方法签名更改为异步方法:
public override async void OnNavigatingTo(INavigationParameters parameters)
{
...
base.OnNavigatingTo(parameters);
}

希望对您有所帮助,并且编码愉快!

关于c# - 在XF Prism 7中不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55803957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com