具有ICommand.Execute(Object)模式的Xamarin Forms / MvvmCross体系结构?

时间:2018-12-12 15:38:28

标签: xamarin mvvmcross

我已经开始学习使用Xamarin Forms和MvvmCross进行一些移动开发。

以最简单的形式,我有一个包含按钮的应用程序。点击此按钮后,它将通过rest服务调用api,并通过消息传递服务返回数据。

使用ICommand.Execute(object)模式时,显示对话框(ACR)时遇到问题。我假设这是因为此模式下的执行不是异步的,因此阻塞了主ui线程?这是我正在做的事情的一个示例:

var cmd = Command.Create(CmdType.Login);
cmd.Execute(User); 

请直接参考MvvmCross文档中的以下几行内容进行异步操作。

MyCommand = new MvxCommand(() => MyTaskNotifier = MvxNotifyTask.Create(() => MyMethodAsync(), onException: ex => OnException(ex)));

private async Task MyMethodAsync()
{
    await _someService.DoSomethingAsync();

    // ...
}

在这种情况下,我的DoSomething()不是aysnc-如果有任何异步无效或否定的意思。为了解决这个问题,我已经从MvxCommand更新为MvxAsyncCommand,然后必须使用创可贴来显示对话框。

await Task.Delay(300);

await Task.Run(() => { command.Execute(User); }).ConfigureAwait(false);

在这一点上,我显然在质疑命令模式的使用。我错过了一个简单的修复程序,还是选择了一种不合适的体系结构?任何指导表示赞赏。

1 个答案:

答案 0 :(得分:0)

您可以像这样使用它

public ICommand YourCommand => new Command(async () => await YourActionAsync());