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

How To Adding Search Functionality to MvxListView - Xamarin Android

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

public class Language
{
    public string Lang { get; set; }
}

语言服务Class

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);
    }

在我的视图模型中,我已经为绑定做了所有这些思考

public ObservableCollection<Language> AllLanguageList { get; private set; }
AllLanguageList = new ObservableCollection<Language>();

所有代码工作正常 现在我想实现 Search

在我的客户端

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?
}

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" />

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

  1. 而不是绑定到 AllLanguageList 绑定到新的 FilteredLanguageList
  2. 每当有人在搜索框或文本字段过滤器中输入内容时 AllLanguageList 并覆盖 FilteredLanguageList
  3. 的内容

非常幼稚和原始:

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);
    }
}

在你的XAML中将你的ListViewItemsSource绑定到FilteredLanguageList,并将你的EntryText属性绑定到SearchQuery.

然后在 FilterLanguages 中实现语言过滤。像这样的东西可以工作,但你需要根据自己的喜好进行调整:

private void FilterLanguages(string query)
{
    FilteredLanguageList = AllLanguageList.Where(l =>
        l.Lang.ToLowerInvariant()
            .Contains(
                query.ToLowerInvariant()).ToList();
}