You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin如何在按钮点击事件中直接调用服务类LoginAsync方法

问题原因

你当前代码的核心问题是:按钮点击触发btone_Clicked方法时,你仅完成了LoginCommand的实例化和赋值操作,没有主动执行该命令,因此LoginAsync方法不会被触发。

实现方案

方案1(推荐,无需额外声明Command)

既然你不需要通过ViewModel绑定命令,可以直接在点击事件内调用服务方法,完全省略Command相关代码:

private ApiServices _apiServices = new ApiServices();

private async void btone_Clicked(object sender, EventArgs e)
{
    // 直接调用登录接口即可
    await _apiServices.LoginAsync(txtone.Text, txttwo.Text);
}

方案2(保留Command的写法)

如果你需要保留Command的声明逻辑,赋值后主动调用Execute方法执行命令即可:

private ApiServices _apiServices = new ApiServices();
public ICommand LoginCommand { get; set; }

async void btone_Clicked(object sender, EventArgs e)
{
    LoginCommand = new Command(async () => 
    {
        await _apiServices.LoginAsync(txtone.Text, txttwo.Text);
    });
    // 主动触发命令执行
    LoginCommand.Execute(null);
}

补充注意点

  • async void仅允许用于事件处理器这类特殊场景,其他异步方法建议统一用async Task作为返回值,避免异常抛出时无法捕获导致程序崩溃
  • 可以额外增加防重复点击逻辑,比如用布尔变量标记请求状态,避免用户连续点击多次触发登录请求

内容的提问来源于stack exchange,提问作者Chim Di Tru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:39:03