読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

複数のプロパティを監視して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です。