如何从PagedCollectionView中的当前页面获取项目?

时间:2011-09-22 13:51:57

标签: silverlight data-binding mvvm datagrid

我的PagedCollectionView中的对象绑定到DataGrid和DataPager。

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

如何从ViewModel轻松地从PagedCollectionView中的当前页面获取项目?我希望有这样的事情:

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

有像SourceCollection,PageIndex和Count这样的属性,但在这种情况下我觉得它们没用。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

如果你想获得精选商品,你可以使用Linq来做。

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

确保为System.Linq添加using语句。

编辑:每当我对实际发生的事情有疑问时,我只需使用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);

因此,您可以看到它如何仅从此代码返回当前页面中的项目。