我有两个来自Windows社区工具包的高级集合视图,并且两个视图都绑定到具有不同过滤器和排序方式的相同ObservableCollection,基本上在其中一个中,我只需要显示最近且数量有限的项,那么我该如何实现那?
PeoplePrivate = new ObservableCollection<Person>();
var People = new AdvancedCollectionView(PeoplePrivate, true) { Filter = x => true };
People.SortDescriptions.Add(new SortDescription(nameof(Person.Name), SortDirection.Ascending));
var RecentPeople = new AdvancedCollectionView(PeoplePrivate, true) { Filter = x => true };
RecentPeople.SortDescriptions.Add(new SortDescription(nameof(Person.Modified), SortDirection.Descending));
因此,如您在上面的代码中看到的,recentPeople根据修改的日期只能显示最近的20个人。似乎没有任何属性可以在advancedCollection视图上设置最大大小,或者执行“ Take(20)”之类的操作,我试图通过首先使用Take(20)创建IEnumeralbe来返回新的advancedCollection,但这看起来并不正确的方式是bcz,我需要将其链接到相同的ObservableCollection。
答案 0 :(得分:1)
查看或执行类似“ Take(20)”之类的操作,我尝试通过首先使用Take(20)创建IEnumeralbe来返回新的advancedCollection
当前AdvancedCollectionView
尚未提供此方法来获取最近的号码项目。但是您可以删除除源代码前20名之外的所有项目。
public static class AdvancedCollectionViewEx
{
public static void GetTopRang(this AdvancedCollectionView acv, int Range)
{
do
{
var LastIndex = acv.Source.Count - 1;
acv.Source.RemoveAt(LastIndex);
} while (acv.Source.Count > Range);
}
}
用法
RecentPeople.GetTopRang(20);
答案 1 :(得分:0)
我喜欢WPF提供的here答案,并使用绑定转换器将集合视图绑定到ListView时的最终结果。然后,当集合更改并重新过滤时,应该更新它吗?