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

.NET MAUI中Android平台SearchHandler的Command方法无法触发求助

问题解决:.NET MAUI SearchHandler Android平台Command不触发及ListView不更新

一、修复Android平台SearchHandler Command不触发问题

Android平台下SearchHandler默认的选中逻辑不会自动触发绑定的Command,需要在自定义SearchGymHandler中重写OnItemSelected方法手动调用Command:

namespace BehaviorMauiApp.Utils;

public class SearchGymHandler : SearchHandler
{
    public static BindableProperty GymToSearchProperty = BindableProperty.Create(
        nameof(GymToSearch), typeof(List<Gym>), typeof(SearchGymHandler), new List<Gym>());
    public List<Gym> GymToSearch
    {
        get => (List<Gym>)GetValue(GymToSearchProperty);
        set => SetValue(GymToSearchProperty, value);
    }

    protected override void OnQueryChanged(string oldValue, string newValue)
    {
        base.OnQueryChanged(oldValue, newValue);
        ItemsSource = GymToSearch.Where(a => a.Description.Contains(newValue, StringComparison.OrdinalIgnoreCase)).ToList();
    }

    // 新增方法处理Item选中事件,手动触发Command
    protected override void OnItemSelected(object item)
    {
        base.OnItemSelected(item);
        if (Command != null && Command.CanExecute(item))
        {
            Command.Execute(item);
        }
        // 选中后清空搜索框,关闭搜索界面(可选)
        Query = string.Empty;
    }
}

同时简化XAML中的Command参数绑定,直接利用重写方法传入选中项:

<utils:SearchGymHandler
    x:Name="searchGymHandler"
    GymToSearch="{Binding ListGym}"
    Placeholder="pesquisar"
    Command="{Binding SelectGymCommand}">

二、确保Android平台ListView正常更新

即使使用ObservableCollection,如果非UI线程操作集合,Android平台可能无法触发UI更新,需要强制在UI线程执行添加操作:

修改ViewModel中的Select方法:

private Task Select(Gym selectedGym)
{
    MainThread.BeginInvokeOnMainThread(() =>
    {
        SelectedGyms.Add(selectedGym);
    });
    return Task.CompletedTask;
}

三、额外检查项

  • 确认Gym类的Description属性为公共可访问状态,绑定路径无拼写错误;
  • 检查ContentPage的BindingContext是否正确关联到GymViewModel,可通过Visual Studio输出窗口查看绑定诊断信息排查错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:04:52