はて、ReactivePropertyで二つの値を監視するにはどうしたらいいんだ?
拡大率と中心位置の二つの値から、左上の位置を算出したい。
二つをSubscribeして「左上の位置」のValueを更新すればいいのかな?
— ぎゃばんV8!V8! 怒りのデスロード (@ledsun) 2015, 10月 23
こういう場合は2つのIObservableをCombineLatestで合成してからReactivePropertyにしてしまえばお手軽です。
using Reactive.Bindings; using System.Reactive.Linq; namespace MultiValueApp { class MainWindowViewModel { public ReactiveProperty<int> Lhs { get; } public ReactiveProperty<int> Rhs { get; } public ReadOnlyReactiveProperty<int> Answer { get; } public MainWindowViewModel() { this.Lhs = new ReactiveProperty<int>(0); this.Rhs = new ReactiveProperty<int>(0); this.Answer = this.Lhs.CombineLatest(this.Rhs, (x, y) => x + y) .ToReadOnlyReactiveProperty(); } } }
この例では、監視元はReactivePropertyですが通常のINotifyPropertyChangedを実装したクラスはObservePropertyでIObservable化できるので、そいつをCombineLatestしてやればOKです。