uwp ограничивает количество элементов в AdvancedCollectionView

У меня есть два расширенных представления коллекции из набора инструментов сообщества 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));

Как вы можете видеть в приведенном выше коде, недавние люди должны отображать только 20 последних людей в соответствии с датой изменения. Кажется, нет никакого свойства, чтобы установить максимальный размер в представлении advancedCollection или сделать что-то вроде Take(20).

Я попытался вернуть новый advancedCollection, сначала создав IEnumerable с помощью Take(20), но это выглядит неправильно, потому что мне нужно, чтобы он был связан с тем же ObservableCollection.


person Muhammad Touseef    schedule 31.03.2019    source источник
comment
Это была бы интересная функция. Я также экспериментировал с другой оболочкой для ObservableCollection для другого варианта использования, но часть этой работы также может служить этому варианту использования. Не могли бы вы сообщить о проблеме в репозитории Toolkit здесь? github.com/windows-toolkit/WindowsCommunityToolkit/issues/new   -  person Michael Hawker - MSFT    schedule 25.04.2019


Ответы (2)


просмотреть или сделать что-нибудь вроде «Take (20)». Я попытался вернуть новую расширенную коллекцию, сначала создав IEnumeralbe с помощью Take (20)

В настоящее время 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);
person Nico Zhu - MSFT    schedule 01.04.2019
comment
это работает только тогда, когда я вызываю этот метод расширения, он автоматически не синхронизирует данные, такие как фильтр или сортировка - person Muhammad Touseef; 01.04.2019
comment
Да, вам нужно вызвать этот метод после сортировки данных. Поэтому я создаю этот метод расширения. - person Nico Zhu - MSFT; 02.04.2019
comment
это полезно, но не тот ответ, который я ищу, спасибо - person Muhammad Touseef; 02.04.2019

Мне нравится ответ WPF, предоставленный здесь и используйте преобразователь привязки, чтобы отрезать конечный результат представления коллекции, когда он привязан к ListView. Затем он должен обновляться при изменении коллекции и повторном фильтре?

person Michael Hawker - MSFT    schedule 25.04.2019