【发布时间】:2020-01-24 05:33:40
【问题描述】:
我在 WPF 中使用 ReactiveUI。我将一个ListBox.ItemSource 绑定到我的ViewModel.FileList。
下面的Observable.CombinedLatest() 不会触发 Func。
但是上面的单个 Observable 触发了它的 Func。
我想使用组合 observable 的原因是: 我想在第一次加载时显示数据列表 - 这是由 ConvertedMessage 属性值更改触发的。
然后当用户在搜索文本框中输入单词时,我还需要显示不同的列表,它们实际上都更新了相同的 DataBinding 源列表。
我还尝试了两个不同的单独的 observable,Observable.SelectMany(MyMethod) 中的两个单独的方法,但似乎第二个 observable 覆盖了前一个 - 因为只有最后一个 observable.MyMethod 被调用。
关于 ReactiveUI CombinedLatest() 有什么想法或建议吗,它是否仅在所有可观察对象产生元素时才触发该功能?
this.WhenAnyValue(x => x.ConvertedMessage).Where(x=>x!=null).Subscribe(x => { var msg = x.Message; });
var initial =
this
.WhenAnyValue(x => x.ConvertedMessage)
.Where(x=>x!=null);
var searchObjs =
this
.WhenAnyValue(x => x.SearchText)
.Throttle(TimeSpan.FromMilliseconds(800))
.Select(term => term)
.DistinctUntilChanged()
.Where(term => !string.IsNullOrEmpty(term));
reviewFiles = Observable.CombineLatest(initial, searchObjs, (message, term) => {
ObservableCollection<PrecedentFile> loadedFiles = new ObservableCollection<PrecedentFile>();
var start = 0;
CurrentPage = 1;
if (!string.IsNullOrEmpty(term))
{
//some logic
return searchedResults;
}
else
{
//other logic
return loadedFiles.AsEnumerable<PrecedentFile>();
}
}).Select(x=>x)
.ObserveOn(RxApp.MainThreadScheduler)
.ToProperty(this, x => x.ReviewFiles);
【问题讨论】:
标签: wpf observable reactiveui