Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

ReactiveProperty v1.0.2をリリースしました

$
0
0

間にv1.0.1も挟んでますが、こんな感じの変更をしています。

ReadOnlyReactiveCollectionの生成を簡略化

ObservableCollectionからReadOnlyReactiveCollectionを作ろうと思うと今まで以下のようなコードが必要でした。

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();

Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>