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

发布于 2024-12-06 03:19:23 字数 564 浏览 0 评论 0原文

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

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

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

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

有诸如 SourceCollection、PageIndex 和 Count 之类的属性,但我认为它们在这种情况下没有用处。我在这里缺少什么?

I've got my objects in PagedCollectionView bound to DataGrid and DataPager.

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

How can I easily get items from current page in PagedCollectionView from my ViewModel? I wish there were something like this:

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

There are properties like SourceCollection, PageIndex and Count but I don't find them useful in this case. What am I missing here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

撩发小公举 2024-12-13 03:19:24

如果你想获取选定的项目,你可以使用 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);

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

If you want to get select items you can just use Linq to do it.

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

Make sure you add a using statement for System.Linq.

Edit: Whenever I have a question as to what is really going on I just look at the code using Reflector (or ILSpy). In this case here is the relevant code inside GetEnumerator() which is how the Select or Where gets the items in the list:

    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);

So you can see how it is returning only the items in the current page from this code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文