如何将搜索功能添加到MvxListView-Xamarin Android

如何将搜索功能添加到MvxListView-Xamarin Android,android,search,xamarin,mvxlistview,Android,Search,Xamarin,Mvxlistview,我已经创建了列表,并将其绑定到我的布局中。现在,它工作正常。我想在MvxListView中实现搜索功能 -代码 -模型 语言服务课 public async Task GetAllLanguageList(Action<ObservableCollection<Language>> successAction, Action<Exception> errorAction) { ObservableCollection<Langua

我已经创建了列表,并将其绑定到我的布局中。现在,它工作正常。我想在MvxListView中实现搜索功能 -代码 -模型

语言服务课

public async Task GetAllLanguageList(Action<ObservableCollection<Language>> successAction, Action<Exception> errorAction)
    {
        ObservableCollection<Language> AllLanguageList = new ObservableCollection<Language>();
        AllLanguageList.Add(new Language { Lang = "Spanish"});
        AllLanguageList.Add(new Language { Lang = "Portuguese"});
        AllLanguageList.Add(new Language { Lang = "Manadarin"});
        AllLanguageList.Add(new Language { Lang = "English"});

        await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(0));
        successAction(AllLanguageList);
    }
公共异步任务GetAllLanguageList(操作成功操作,操作错误操作) { ObservableCollection AllLanguageList=新的ObservableCollection(); 添加(新语言{Lang=“西班牙语”}); 添加(新语言{Lang=“葡萄牙语”}); 添加(新语言{Lang=“Manadarin”}); 添加(新语言{Lang=“English”}); 等待系统.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(0)); successAction(所有语言列表); } 在我的视图模型中,我为绑定做了所有这些思考

public ObservableCollection<Language> AllLanguageList { get; private set; }
AllLanguageList = new ObservableCollection<Language>();
public observeCollection AllLanguageList{get;private set;}
AllLanguageList=新的ObservableCollection();
所有代码都可以正常工作 现在我想实现搜索

在我的客户方面

edit_text_search = FindViewById<EditText>(Resource.Id.edit_text_search);
edit_text_search.TextChanged += InputSearch_TextChanged;

private void InputSearch_TextChanged(object sender, Android.Text.TextChangedEventArgs e)
{
    //What should I write here?
}
edit\u text\u search=findviewbyd(Resource.Id.edit\u text\u search);
编辑_text_search.TextChanged+=输入搜索_TextChanged;
私有void InputSearch_TextChanged(对象发送者,Android.Text.TextChangedEventArgs e)
{
//我应该在这里写什么?
}
Xaml代码

<Mvx.MvxListView
    android:id="@+id/ListView2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff"
    android:divider="@null"
    android:dividerHeight="0dp"
    local:MvxBind="ItemsSource LanguageList"
    local:MvxItemTemplate="@layout/mainlist_template_all" />

一个非常简单的解决方案是:

  • 而不是绑定到
    AllLanguageList
    绑定到新的
    FilteredLanguageList
  • 每当有人在搜索框或文本字段中输入内容时,过滤
    AllLanguageList
    并覆盖
    FilteredLanguageList
  • 非常天真和原始:

    private List<string> _filteredLanguageList;
    public List<string> FilteredLanguageList
    {
        get => _filteredLanguageList;
        set 
        {
            _filteredLanguageList = value;
            NotifyPropertyChanged();
        }
    }
    
    private string _searchQuery;
    public string SearchQuery
    {
        get => _searchQuery;
        set
        {
            _searchQuery = value;
            FilterLanguages(_searchQuery);
        }
    }
    

    只需筛选您绑定到ListView的项目资源。您好@Cheesebaron,谢谢您的重播。你能告诉我如何在Xaml上做到这一点吗?
    private List<string> _filteredLanguageList;
    public List<string> FilteredLanguageList
    {
        get => _filteredLanguageList;
        set 
        {
            _filteredLanguageList = value;
            NotifyPropertyChanged();
        }
    }
    
    private string _searchQuery;
    public string SearchQuery
    {
        get => _searchQuery;
        set
        {
            _searchQuery = value;
            FilterLanguages(_searchQuery);
        }
    }
    
    private void FilterLanguages(string query)
    {
        FilteredLanguageList = AllLanguageList.Where(l =>
            l.Lang.ToLowerInvariant()
                .Contains(
                    query.ToLowerInvariant()).ToList();
    }