間にv1.0.1も挟んでますが、こんな感じの変更をしています。
ReadOnlyReactiveCollectionの生成を簡略化
ObservableCollection
var models = new ObservableCollection<Model>(); var changes = models .ToCollectionChanged() .Select(x => new CollectionChanged<ViewModel> { Action = x.Action, Index = x.Index, Value = x.Value == null ? null : new ViewModel(x.Value) }); var source = new ObservableCollection<ViewModel>( models.Select(m => new ViewModel(m)); var viewModels = new ReadOnlyReactiveCollection<ViewModel>(changes, source);
めんどくさいので下のように書けるようにしました。
var models = new ObservableCollection<Model>(); var viewModels = models.ToReadOnlyReactiveCollection(m => new ViewModel(m));
IDisposableExtensions.AddToメソッドに戻り値を追加
地味にReactivePropertyやReadOnlyReactiveCollectionやReactiveCommandはIDisposableを実装しています。こいつらは、時がきたらDisposeを呼んでやる必要があります。個別にDisposeを呼ぶのがだるいので、CompositeDisposableあたりに纏めておいて呼ぶのが楽なので、今までこんな感じに書いてました。
var d = new CompositeDisposable(); var p1 = ...何か重いIObservable<T>...().ToReactiveProperty(); p1.AddTo(d); // 不要になったタイミングで d.Dispose();
AddTo拡張メソッドの戻り値がvoidだったので、メソッドチェインの中に入れなかったのですが、AddTo拡張メソッドの戻り値で第一引数を戻り値として返すようにしました。なので、以下のように破棄予定のReactiveProperty等はメソッドチェイン内でCompositeDisposableに追加できるようになりました。
var d = new CompositeDisposable(); var p1 = ...何か重いIObservable<T>...().ToReactiveProperty().AddTo(d); // 不要になったタイミングで d.Dispose();