You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactiveUI DynamicData多过滤器实时集合分页问题咨询

实时集合多过滤+分页的ReactiveUI实现问题

我找不到处理带多过滤器的实时集合的解决方案,需求是结合WhenAnyValue(多过滤器)、AutoRefresh(x=>x.colproperty),实现过滤、转换、自定义分页(本示例不使用虚拟化)等操作。

原代码实现

this.WhenAnyValue(x => x.Creations, x => x.PerPage, x => x.CurrentPage, x => x.IncludePublished, x => x.Search, x => x.ShowForReview)
    .Select(x => x.Item1.ToObservableChangeSet().AutoRefresh(x => x.Listing).ToCollection().Select(x => x
        .Where(x => wherefilters)
        .Reverse()
        .Skip(PerPage * (CurrentPage - 1))
        .Take(PerPage)
        .Select(x => new CreationViewModel(x)))
    .Do(x =>
    {
        if (x.Count() == 1)
            SelectedCreation = x.First();
    })
    .Do(x =>
        FilteredCreations = x.ToObservableCollection()
    ).Subscribe()).Subscribe();

现有疑问与尝试

我通常的做法是ToObservableChangeSet()...filter..transform..Bind(out readonlycollection),不确定是否需要拆分实现?曾找到ToObservableChangeSet().Filter(this.WhenAnyValue....)的用法,但似乎已不被支持,也找不到此类场景的示例。当前代码中CreationViewModel实例化次数过多,推测是WhenAnyValue和AutoRefresh触发次数叠加导致。

我尝试拆分Observable并添加了之前遗漏的AutoRefreshOnObservable,但仍存在两个核心问题:

  • 如何正确计算最大页码?我采用toCollection的方法可实现但订阅次数过多(尝试用take(1)立即取消订阅无效),期望通过.PageEx()扩展方法更新Paging类对象的MaxPage。
  • 已实现ViewModel工厂通过缓存ViewModel得到正确结果,但Observable链存在问题,transform部分被重复触发多次,不确定是否为正常现象。

内容的提问来源于stack exchange,提问作者Libor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:32:33