我有一个简单的TableView,它显示从网络下载的字符串列表。列表非常大(约140k字符串)。使用AddRange并没有发生任何事情,但如果我静态编码一个小的2项目列表,它可以正常工作。
视图模型中的重载命令代码:
public ReactiveCommand<List<string>> LoadItems { get; protected set; }
// Later, in the constructor...
LoadItems = ReactiveCommand.CreateAsyncObservable(_ => BlobCache.LocalMachine.GetAndFetchLatest(
client.ItemListKey,
client.FetchItemList));
LoadItems.Subscribe(list => {
ItemList.Clear();
ItemList.AddRange(list);
});
但是,如果我将其更改为类似的内容,它实际上会将单元格添加到表格视图中:
LoadItems.Subscribe(list => {
Console.WriteLine(list.Count); // To see if it's working (it is)
var stuff = new List<string>() {
"Test item!"
};
ItemList.AddRange(stuff);
});
我的猜测是,我以非常低效的方式添加项目,并且它不会从AddRange调用返回。我对Rx / ReactiveUI / MVVM / all-this-cool-linq-stuff非常陌生,但这个前提非常棒。
为了它的价值 - 我试图在MonoTouch上做这件事。
答案 0 :(得分:0)
我喜欢这个尝试检查。!
var search = this.ObservableForProperty(x => x.SearchQuery, _ => _)
.Throttle(TimeSpan.FromMilliseconds(100))
.DistinctUntilChanged()
.Select(q => Observable.Start(() =>
{
var searchResult = getSearchQuery(q);
return searchResult;
}).ObserveOn(SynchronizationContext.Current))
.Switch()
.Select(x => new ReactiveList<IProduct>(x.Result))
.ToProperty(this, x => x.SearchResultList, out _SearchResultList);
我的功能是
public async Task<IEnumerable<IProduct>> getSearchQuery(string query)
{
var service = new ProductService();
var result = await service.SearchProductAsync(query);
return result;
}
答案 1 :(得分:0)
我相信这是一个错误。你能在GitHub回购中提出问题吗? (https://github.com/reactiveui/ReactiveUI/issues)
答案 2 :(得分:0)
看起来此问题已在ReactiveUI 6.2.1中修复。