我如何查询ObservableCollection列表

时间:2017-07-24 02:50:36

标签: c# linq uwp

我的VM上有一个属性,它与ListView

绑定
    private FindCollection _searchMatches;
    public FindCollection SearchMatches {
        get { return _searchMatches; }
        set { this.Set(ref _searchMatches, value); }
    }

我的“FindCollection”类继承了ObserveCollection:

FindCollection : ObservableCollection<MyClass>

在我的FindCollection上我有一个LoadItems任务,每次导航到我的视图时都会调用它:

async Task<IList<MyClass>> LoadItems()

var stocks = _response.products?
                    .Select(s => new MyClass(PLService.DtoToModel(s)))
                    .ToList();
            var items = stocks.GroupBy(p => p.productModel.Description)
                                    .Select(p => p.First())
                                    .ToList();
            return items;

所以SearchMatches现在有项目
当用户搜索字符串时,我想对List Items进行排序,其中description与searchterm相同 如何查询SearchMatches.Where(s.description == searchterm)到我的VM;

更新: SearchMatches包含{MyClass}和MyClass {eachproduct}

谢谢,
NicoTing

2 个答案:

答案 0 :(得分:1)

使用UWPCommunityToolkit中的AdvancedCollectionView。它会让你的工作变得非常简单。

要使用AdvancedCollectionView,您应该安装Microsoft.Toolkit.Uwp.UI nuget包。

这是syndax:

var acv = new AdvancedCollectionView(oc);  //oc is your ObservableCollection
acv.Filter = s => s.Description.ToLower().Contains(searchTerm.ToLower());
YourListView.ItemsSource = acv;

了解更多信息:AdvancedCollectionView

答案 1 :(得分:0)

var query  = SearchMatches.Where(s => s.Description.ToLower().Contains(searchTerm.ToLower()));
        FindCollection collection = new FindCollection();
        foreach (var r in query )
        {
            collection.Add(r);
        }