我使用Xamarin Prism设计了我的应用程序。当用户导航到这个给定页面时,我有一个应该执行的命令。它在不同的项目中运行,但当我重写相同的代码时,它将不会运行。我比较了代码,几乎是一样的。但是,它仍然不能在此代码中运行。
首先,我定义了命令:
public IAsyncCommand InitCommand { get; }
在我的视图模型构造函数中,我有这样的代码:
InitCommand = new AsyncCommand(InitAsync);
这是我的InitAsync方法:
private async Task InitAsync()
{
await GetTransactionsByWallet(WalletId).ConfigureAwait(false); ;
}
在我的棱镜的OnNavigatedTo部分,我有这样的代码:
public void OnNavigatedTo(INavigationParameters parameters)
{
WalletId = parameters.GetValue<IWallets>("wallet").Id;
InitCommand.ExecuteAsync();
}
注意:即使我停止调试InitCommand.ExecuteAsync();
,它也不会执行,调试器也不会停止它。
我使用AsyncAwaitBestPractices.MVVM来创建命令。
发布于 2020-10-06 15:30:37
您决定运行命令而不是直接运行方法的原因是什么?也就是说,为什么不仅仅是await InitAsync()
,而不是InitCommand.ExecuteAsync();
。
注意:您可以将OnNavigatedTo设置为异步方法。由于它是eventhandler (在导航过程中触发的事件),因此允许异步void - https://docs.microsoft.com/en-us/archive/msdn-magazine/2013/march/async-await-best-practices-in-asynchronous-programming
这里-布莱恩·拉古纳斯提到的https://forums.xamarin.com/discussion/91897/prism-calling-async-method-in-onnavigatedto-or-any-of-the-methods-from-inavigationaware (棱镜库的经理)
但是如果这个选项听起来不太好--另一个选择是在视图的“已加载”事件期间运行该方法。这些不是变通方法,而是正确的mvvm方法。要在loaded上运行该方法,您有两种方法:
(1)使用Xaml行为库的CallMethodAction或(2)使用Prism内置的InvokeCommandAction和XAML的交互性。
https://stackoverflow.com/questions/64101261
复制相似问题