Dhr*_*hil 1 android mvvmcross searchview xamarin
我是Xamarin Android Development的新手,我使用MvvmCross来绑定数据.我在动作栏上有SerachView.我想从ViewModel中的列表中搜索数据.我可以实现它吗?我在互联网上搜索过这个问题,但都使用了适配器,我想在不使用ViewModel的适配器的情况下搜索列表项.我不知道怎么做.所以有人能建议我一个简单的方法吗?
任何建议或意见将不胜感激.
这很简单.
您SearchView绑定到用于过滤的字符串属性.在这里我假设它被称为SearchQuery.
目前尚不清楚要用于过滤的标准,我将假设ViewModel具有一个Name属性,其中SearchQuery将包含该名称.
所以你的ViewModel看起来像:
public class SearchViewModel : MvxViewModel
{
public string SearchQuery
{
get { return _searchQuery; }
set {
_searchQuery = value;
RaisePropertyChanged(() => SearchQuery);
RaisePropertyChanged(() => FilteredResults);
}
}
public List<ListItemViewModel> UnfilteredResults
{
get { return _unfilteredResults; }
set {
_unfilteredResults = value;
RaisePropertyChanged(() => UnfilteredResults);
RaisePropertyChanged(() => FilteredResults);
}
}
public List<ListItemViewModel> FilteredResults
{
get
{
if (string.IsNullOrEmpty(SearchQuery))
return UnfilteredResults;
return UnfilteredResults
.Where(r => r.Name.Contains(SearchQuery)).ToList();
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以,无论何时在搜索框中输入新值,它都会触发PropertyChanged事件FilteredResults并使用简单的LINQ查询来过滤结果.
如果您不想每次都换出整个列表,可以使用ObservableCollection执行此操作,并在其中添加和删除项目.
编辑:
因此,如上所述,您只需绑定MvxListView到新项目源.假设您正在为视图使用AXML布局:
<MvxListView
..
local:MvxBind="ItemsSource FilteredResults; ItemClick ResultClickedCommand" />
Run Code Online (Sandbox Code Playgroud)
至于SearchView我,我只是看,MvvmCross似乎没有任何代码可以轻松绑定到它,并且它不会继承EditText,所以你需要做类似这里描述的事情:https://stackoverflow.com/a /三十六万八千三百七十九分之二千二百五十零万一千九百零六
最简单的方法可能只是实现SearchView.IOnQueryTextListener界面,并在那里设置你在实现中收到的新字符串ViewModel.
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |