Как я могу получить элементы с текущей страницы в PagedCollectionView? - PullRequest
2 голосов
/ 22 сентября 2011

У меня есть объекты в PagedCollectionView , связанные с DataGrid и DataPager.

var pcView = new PagedCollectionView(ObservableCollection<Message>(messages));

Как я могу легко получить элементы с текущей страницы в PagedCollectionView из моей ViewModel? Я хотел бы что-то вроде этого:

var messagesFromCurrentPage = pcView.CurrentPageItems; // error: no such a property

Есть такие свойства, как SourceCollection, PageIndex и Count, но я не считаю их полезными в этом случае. Что мне здесь не хватает?

1 Ответ

1 голос
/ 22 сентября 2011

Если вы хотите получить выбранные предметы, вы можете просто использовать Linq, чтобы сделать это.

var items = pcView.Where(i => i.SomeCondition == true);

Убедитесь, что вы добавили оператор использования для System.Linq.

Редактировать : Всякий раз, когда у меня возникает вопрос о том, что на самом деле происходит, я просто смотрюв коде, используя Reflector (или ILSpy).В этом случае вот соответствующий код внутри GetEnumerator (), который позволяет Select или Where получать элементы в списке:

    List<object> list = new List<object>();
    if (this.PageIndex < 0)
    {
        return list.GetEnumerator();
    }
    for (int i = this._pageSize * this.PageIndex; i < Math.Min(this._pageSize * (this.PageIndex + 1), this.InternalList.Count); i++)
    {
        list.Add(this.InternalList[i]);
    }
    return new NewItemAwareEnumerator(this, list.GetEnumerator(), this.CurrentAddItem);

Таким образом, вы можете видеть, как он возвращает только элементы на текущей странице.из этого кода.

...