从ViewModel中的列表中搜索(Xamarin Android)

Dhr*_*hil 1 android mvvmcross searchview xamarin

我是Xamarin Android Development的新手,我使用MvvmCross来绑定数据.在动作上有SerachView.我想从ViewModel中的列表中搜索数据.我可以实现它吗?我在互联网上搜索过这个问题,但都使用了适配器,我想在不使用ViewModel的适配器的情况下搜索列表项.我不知道怎么做.所以有人能建议我一个简单的方法吗?

任何建议或意见将不胜感激.

Che*_*ron 7

这很简单.

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.