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
相关产品推荐
相关产品推荐

