以下の内容はhttps://blog.okazuki.jp/entry/2014/09/28/060800より取得しました。


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

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



以上の内容はhttps://blog.okazuki.jp/entry/2014/09/28/060800より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14