【问题标题】:Prism Xamarin OnNavigatedTo will not execute a functionPrism Xamarin OnNavigatedTo 不会执行函数
【发布时间】:2020-09-28 11:24:05
【问题描述】:

我使用 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 来创建命令。

【问题讨论】:

  • debugger also wont stop to it 表示在导航页面时不会调用 OnNavigatedTo。
  • @JackHua-MSFT 这一行 WalletId = parameters.GetValue("wallet").Id;正常执行..但这不会执行之后的行
  • 如果你删除WalletId = parameters.GetValue&lt;IWallets&gt;("wallet").Id;会执行吗?如果是这样,WalletId = parameters.GetValue&lt;IWallets&gt;("wallet").Id; 阻止了该方法。
  • @JackHua-MSFT 是的,它阻止了我评论它!如何解决?
  • 我不使用棱镜,不知道您是否正确使用它。 Here 是我搜索的文档,和你的不一样。

标签: xamarin mvvm prism


【解决方案1】:

您决定运行命令而不是直接运行方法的任何原因?即,而不是InitCommand.ExecuteAsync(); 为什么不只是await InitAsync()

注意:您可以将 OnNavigatedTo 设为异步方法。由于它是一个事件处理程序(在导航期间触发的事件),因此允许使用 async 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 正如 Brian Lagunas(棱镜图书馆经理)所提到的

但如果该选项听起来不好 - 另一个选项是在视图的“加载”事件期间运行该方法。这些不是解决方法,这些是执行此操作的正确 mvvm 方法。要在加载时运行该方法,您有两种方法 -

(1) 使用 Xaml 行为库的 CallMethodAction 或 (2) 将 Prism 的内置 InvokeCommandAction 与 XAML 交互性结合使用。

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2017-09-14
    • 2021-07-25
    相关资源
    最近更新 更多