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
相关产品推荐
相关产品推荐

