我的PagedCollectionView中的对象绑定到DataGrid和DataPager。
var pcView = new PagedCollectionView(ObservableCollection<Message>(messages));
如何从ViewModel轻松地从PagedCollectionView中的当前页面获取项目?我希望有这样的事情:
var messagesFromCurrentPage = pcView.CurrentPageItems; // error: no such a property
有像SourceCollection,PageIndex和Count这样的属性,但在这种情况下我觉得它们没用。我在这里缺少什么?
答案 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);
因此,您可以看到它如何仅从此代码返回当前页面中的项目。