かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

複数のプロパティを監視してReactivePropertyの値を更新する

こういう場合は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です。