ネットワークからダウンロードした文字列のリストを表示する単純な 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でこれをやろうとしています。