Я использую ReactiveUI в WPF. Я привязываю один ListBox.ItemSource
к своему ViewModel.FileList
.
. Нижеприведенный Observable.CombinedLatest()
не вызывает Fun c. Но вышеприведенный одиночный триггер Observable имеет свой Fun c.
. Я хочу использовать комбинированную наблюдаемую причину: я хотел бы отобразить список данных при первой загрузке - это вызвано свойством ConvertedMessage значение изменилось.
Затем мне также нужно отобразить другой список, когда пользователь вводит слова в текстовое поле поиска, оба они фактически обновляют один и тот же список источников DataBinding.
Я также пробовал две разные отдельные наблюдаемые два отдельных метода в Observable.SelectMany(MyMethod)
, но, кажется, вторая наблюдаемая переопределяет предыдущий - потому что вызывается только последний 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);