绑定时按钮被禁用

Button is disabled when binding

我的 ViewModel 中有一个 IMvxAsyncCommand 方法来执行服务器调用,并根据结果导航到 ViewModel 或其他。我不知道为什么,但它禁用了绑定点击事件的按钮。

public IMvxAsyncCommand Register
{
    var runner = Task.Run(() => _service.Register());
    runner.Wait();
    if (runner.Result.Status == SUCCESS)
    {
        return new MvxAsyncCommand(() => _navigationService.Navigate<NextViewModel>());
    }
    else
    {
        return new MvxAsyncCommand(() => _navigationService.Navigate<ErrorViewModel>());
    }
}

我尝试将运行程序移至异步方法并设置一个带有响应的全局变量,但我仍然遇到此问题。如果我评论服务调用并只留下 navigationService 代码,那么按钮将被启用,所以我想问题出在我对这个方法进行服务调用的方式上。

首先,您的代码片段无法编译。如果它是 属性 Getter,它将阻塞直到 _service.Register() 完成,这可能不是您想要的。相反,您应该将该调用放入命令中并等待它:

private IMvxAsyncCommand _register;
public ICommand Register => _register = _register ?? new MvxAsyncCommand(DoRegisterCommand);
private async Task DoRegisterCommand()
{
    var result = await _service.Register();
    if (result.Status == SUCCESS)
        await _navigationService.Navigate<NextViewModel>();
    else
        await _navigationService.Navigate<ErrorViewModel>();
}