C# 显示ICollectionView的前X项
我有一个名为C# 显示ICollectionView的前X项,c#,wpf,filtering,collectionviewsource,collectionview,C#,Wpf,Filtering,Collectionviewsource,Collectionview,我有一个名为Suggestions的IcollectionView属性,它绑定到列表框的itemsource 我使用以下代码来设置它 // Set up Suggestions collection for filtering purposes var collectionViewSource = new CollectionViewSource(); collectionViewSource.Source = SomeCollection; // SomeCollection is of t
Suggestions
的IcollectionView
属性,它绑定到列表框的itemsource
我使用以下代码来设置它
// Set up Suggestions collection for filtering purposes
var collectionViewSource = new CollectionViewSource();
collectionViewSource.Source = SomeCollection; // SomeCollection is of type IEnumerable!!
// Create view
Suggestions = collectionViewSource.View;
Suggestions.Filter = new Predicate<object>(
item =>
item.ToString().StartsWith(SearchString, true, CultureInfo.CurrentCulture))
//为筛选目的设置建议集合
var collectionViewSource=new collectionViewSource();
collectionViewSource.Source=SomeCollection;//SomeCollection的类型为IEnumerable!!
//创建视图
建议=collectionViewSource.View;
建议.Filter=新谓词(
项目=>
item.ToString().StartsWith(SearchString,true,CultureInfo.CurrentCulture))
SearchString
绑定到文本框的Text
属性,每当发生更改都会触发重新筛选集合的建议。Refresh()
这很好,但显示了所有可用项。如何使其仅显示前X个项目?将可见性与所有筛选的项目关联,并仅将前X个项目的可见性设置为true,或者
首先筛选所有项目,并将前x个项目放在另一个属性中,并将其绑定到UI难道您不能将筛选
谓词
条件移动到SomeCollection。Where
子句?:
SomeCollection = SomeCollection.Where(item => item.ToString().StartsWith(
SearchString, true, CultureInfo.CurrentCulture)).Take(10);
collectionViewSource.Source = SomeCollection;
尝试了
SomeCollection.Cast().Take(X)
,但是它只过滤前X项,这不是我想要的。我想让它过滤整个集合,只显示前X个结果…可以使用yield只返回第一个X谢谢,我想我可以尝试一下,但这不就剥夺了ICollectionView
的全部用途吗?我只是想到了另一种方法,你可以这样做。。。向数据类型添加索引属性,并使用filterPredicate
likei=>i.index