0

我有一个简单的 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 上执行此操作。

4

3 回答 3

0

看起来这个问题已在 ReactiveUI 6.2.1 中修复。

于 2014-11-25T14:25:48.523 回答
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;
    }
于 2014-11-22T02:32:07.723 回答
0

我相信这是一个错误。您可以在 GitHub 存储库上提交问题吗?(https://github.com/reactiveui/ReactiveUI/issues

于 2014-11-22T17:42:17.177 回答