ReactivePropertyの紹介
2015/02/20 めとべや東京 #7
大田 一希
自己紹介
 名前
– 大田 一希(かずき)
– Twitter:okazuki
 Blog
– かずきのBlog@hatena
http://okazuki.hatenablog.com/
 生年月日
– 1981年1月30日(34歳)
 趣味
– ReactivePropertyいじり
– 愛犬
お約束
 記載の内容は個人の見解であり、所属する企業を代表するもの
ではありません。
ReactivePropertyとは
MVVMで個人的にめんどいところ
 Mの変更通知を監視してVMに反映する
– M→VMへのプロパティの値の田植コード
 発狂
– VM→Mへのプロパティの値の田植コード
 発狂(再
 ↑を解決してくれる!!
ReactivePropertyとは
 Reactive ExtensionsをベースとしたMVVMを支援するライブラリ
 neueccさん作
– 現在はxin9leさんと私も加わってメンテナンス中
 幅広いプラットフォームに対応
– Silverlight 4, 5以外なら動くと思ってOK
 基本機能
– IObservable<T> → ReactiveProperty<T>
IObservable<T>って何よ?
 Push型のコレクション
時間
身近でIObservable<T>になるものを
 Event
– INotifyPropertyChanged, INotifyCollectionChanged, etc…
 非同期処理
– Task<T>
 普通のコレクション
– IEnumerable<T>
(無理やりに見たら0秒の間に一気に値が発生する…)
ReactivePropertyどう使うの?
 ModelからViewModelのプロパティ生成
– private ReactiveProperty<string> Property { get; private set; }
// コンストラクタで初期化する
var model = new Model(); // INotifyPropertyChangedを実装したModel
// M → VM単一方向
this.Property = model
.ObservableProperty(x => x.Property) // IObservable<T>に変換
.ToReactiveProperty(); // ReactiveProperty<T>に変換
ReactivePropertyどう使うの?
 ModelからViewModelのプロパティ生成
– private ReactiveProperty<string> Property { get; private set; }
// コンストラクタで初期化する
var model = new Model(); // INotifyPropertyChangedを実装したModel
// M ←→ VM双方向
this.Property = model
.ToReactivePropertyAsSynchronized(x => x.Property); // RP<T>に変換
XAMLでバインドするには
 ReactivePropertyのValueプロパティをバインドする
– <TextBlock Text=“{Binding Property.Value}” />
ReactivePropertyを使うと
 とても宣言的!
その他にも便利クラスあります
 IObservable<bool>から生成するReactiveCommand
 ObservableCollection<T>から生成するReadOnlyReactiveCollection
 ReactiveProperty<T>のバリデーション機能
 Reactive Extensions用の便利メソッド
まとめ
 唯一惚れてるライブラリです
 少しでも興味が湧いたら使ってみてください
参考
 ホームページ
https://github.com/runceel/ReactiveProperty
 ReactiveProperty : Rx + MVVMへの試み(原典)
http://neue.cc/2011/08/26_341.html
 ReactiveProperty オーバービュー
http://okazuki.hatenablog.com/entry/2014/05/07/014133

ReactiveProperty