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

Search from List which is in ViewModel (Xamarin Android )

我是 Xamarin Android 开发的新手,我正在使用 MvvmCross 进行绑定 data.I 有 SerachView on action-bar.I 想从 ViewModel.How 中的列表中搜索数据,我可以实现吗?我在互联网上搜索过这个问题,但都使用了适配器,我想在不使用来自 ViewModel.I 的适配器的情况下搜索列表项我不知道如何做 that.So 任何人都可以建议我一个简单的方法?

如有任何建议或建议,我们将不胜感激。

很简单。

您的 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();
        }
    }
}

那么发生的事情是,每当您在搜索框中输入新值时,它都会触发 FilteredResults 上的 PropertyChanged 事件并使用简单的 LINQ 查询来过滤结果。

如果您不想每次都换出整个列表,您可以使用 ObservableCollection 并在其中添加和删除项目。

编辑:

所以如上所述,您只需将 MvxListView 绑定到新项目源。假设您正在为您的视图使用 AXML 布局:

<MvxListView
  ..
  local:MvxBind="ItemsSource FilteredResults; ItemClick ResultClickedCommand" />

至于SearchView,我刚看了一下,MvvmCross中好像没有代码可以轻松绑定,而且它也没有继承自EditText,所以你需要做这里描述的事情:

最简单的方法可能是简单地实现 SearchView.IOnQueryTextListener 接口,并在其中设置您在 ViewModel.

的实现中收到的新字符串