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

Xamarin中SearchHandler刷新页面加载API新数据及去模糊问题求助

解决方案

一、解决刷新当前页面而非新建页面的问题

你的代码中OnQueryConfirmed方法里新建了Weather实例,这会创建新页面而非更新当前页。正确的做法是获取当前导航栈中的Weather页面实例,直接调用它的frontend方法更新数据:

修改CustomSearchHandler的OnQueryConfirmed方法:

protected override void OnQueryConfirmed()
{
    string icao = Query.Trim();
    if (string.IsNullOrEmpty(icao)) return;

    // 获取当前导航栈中的Weather页面实例
    var currentWeatherPage = Shell.Current.Navigation.NavigationStack.LastOrDefault(page => page is Weather) as Weather;
    if (currentWeatherPage != null)
    {
        currentWeatherPage.frontend(icao);
        // 清空搜索框内容
        Query = string.Empty;
        // 关闭搜索栏
        IsSearching = false;
    }
}

改动说明:

  • 用Shell.Current.Navigation.NavigationStack.LastOrDefault获取当前显示的Weather页面实例,避免新建页面
  • 增加空值判断和输入合法性校验,防止空引用异常
  • 调用当前页面的frontend方法刷新数据
  • 搜索完成后清空搜索框并关闭搜索栏,优化用户体验

二、移除搜索后的模糊背景效果

SearchHandler默认带有模糊背景,只需将其Background属性设置为透明即可:

方法1:在XAML中设置

如果你的SearchHandler是在XAML中声明的,直接添加Background="Transparent":

<local:CustomSearchHandler Background="Transparent" Placeholder="输入ICAO代码..." />

方法2:在代码中设置

在CustomSearchHandler的构造函数中添加背景设置:

public class CustomSearchHandler : SearchHandler
{
    public CustomSearchHandler()
    {
        // 设置背景为透明,移除模糊效果
        Background = Color.Transparent;
    }

    protected override void OnQueryConfirmed()
    {
        // 上面修改后的代码
    }
}

额外优化建议

  • 将frontend方法的返回类型从async void改为async Task,避免异步操作中的潜在问题:
public async Task frontend(string par_icao)
{
    // 原有代码保持不变
}

同时修改调用处:

await currentWeatherPage.frontend(icao);

内容的提问来源于stack exchange,提问作者Bartballon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:01:14