Сначала показывать только часть источника ItemsControl - PullRequest
1 голос
/ 30 мая 2011

У меня есть ItemsControl, отображающий коллекцию файлов.Эти файлы отсортированы по последним модификациям, и их много.

Итак, я хочу сначала показать только небольшую их часть (скажем, только 20 или около того) и отобразить кнопку с надписью "«Показать больше», которое показывало бы все при нажатии.

У меня уже есть решение, но оно предполагает использование старого доброго LINQ Take в свойстве source моей модели представления.Мне было интересно, если бы был более чистый путь.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Почему бы не сделать так, чтобы объект, который вы назначаете для ItemsSource, обрабатывал эту логику - при первом назначении он сообщал бы об ограниченном подмножестве элементов. При нажатии «Показать больше» объект обновляется, чтобы показать больше (или все записи), а затем уведомляет платформу об изменении свойства (например, с помощью IPropertyNotifyChanged).

public class MyItemSource
{
    private List<string> source = { ... };

    public MyItemSource()
    {
        this.ShowThisMany = 20;
    }

    public int ShowThisMany
    {
        get;
        set; // this should call\use the INotifyPropertyChanged interface
    }

    public IEnumerable<string> this[]
    {
        return this.source.Take(this.ShowThisMany);
    }
}

...
MyItemsSource myItemsSource = new MyItemsSource();
ItemsControl.Source = myItemsSource;
...

void OnShowMoreClicked(...)
{
    myItemsSource.ShowThisMany = 50;
}
0 голосов
/ 30 мая 2011

Чтобы сделать это, вам нужно создать своего рода «просмотр» ваших данных.В рамках WPF нет ничего такого, что дало бы вам эту функциональность бесплатно.На мой взгляд, простой кусочек Linq, Take(), является чистым и простым решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...