如何将搜索功能添加到MvxListView-Xamarin Android
我已经创建了列表,并将其绑定到我的布局中。现在,它工作正常。我想在MvxListView中实现搜索功能 -代码 -模型 语言服务课如何将搜索功能添加到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
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();
}