uwp限制AdvancedCollectionView中的项目数

时间:2019-03-31 11:22:35

标签: c# xaml uwp windows-community-toolkit

我有两个来自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。

2 个答案:

答案 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时的最终结果。然后,当集合更改并重新过滤时,应该更新它吗?