【C#】ReactivePropertyのReactiveCollectionについて
ここのところ、せこせこReactiveProperty
を勉強中なのでそのメモを記載します。
※RPの詳細は当該ライブラリ管理者のかずきさんブログを参考にするのが一番です。
blog.okazuki.jp
UIコントロールにObservableCollection
をバインドしていた場合当該コレクションに対してUIスレッド以外から要素の操作をすると例外を吐きます。
が、ObservableCollection
を継承しているReactiveProperty
のReactiveCollection
を用いると、同じような使い方でUIスレッドで要素の操作が可能になります。
※コンストラクタでUIスレッド以外も指定できそうです。
namespace DiffBetweenObservableCollectionAndReactiveCollection { class MainWindowViewModel { public ReactiveCollection<string> reactiveCollection { get; private set; } public ObservableCollection<string> observableCollection { get; private set; } public MainWindowViewModel() { observableCollection = new ObservableCollection<string>(); reactiveCollection = new ReactiveCollection<string>(); } public void AddObservableCollection() { Task.Run(() => { for (int i = 0; i < 10; i++) { this.observableCollection.Add(i.ToString()); } }); } public void AddReactiveCollection() { Task.Run(() => { for (int i = 0; i < 10; i++) { this.reactiveCollection.AddOnScheduler(i.ToString()); } }); } } }
上記のようにViewModel
にバインドしているObservableCollection
にAddするとNotSupportedException
をはきますが、ReactiveCollection
のAddOnScheduler
を使用すれば楽にUIスレッド以外から要素の追加ができました。
Githubにも上げました。