ViewModelpublic class FifthViewModel: ReactiveObject {!float _red;!public float Red {!get { return _red; } set { this.RaiseAndSetIfChanged(ref _red, value); }!}!/* Blue, Green は省略 */!!ObservableAsPropertyHelper<Color> _color;!public Color Color { get { return _color.Value; } }!!public FifthViewModel() {!var r = this.ObservableForProperty(vm => vm.Red).Select(x => x.Value);!var g = this.ObservableForProperty(vm => vm.Green).Select(x => x.Value);!var b = this.ObservableForProperty(vm => vm.Blue).Select(x => x.Value);!!_color = Observable.CombineLatest(r, g, b, !(x, y, z) => new Color(x, y, z)).ToProperty(this, vm => vm.Color);!}!}47
48.
public class FifthViewModel: ReactiveObject {!float _red;!public float Red {!get { return _red; } set { this.RaiseAndSetIfChanged(ref _red, value); }!}!/* Blue, Green は省略 */!!ObservableAsPropertyHelper<Color> _color;!public Color Color { get { return _color.Value; } }!!public FifthViewModel() {!var r = this.ObservableForProperty(vm => vm.Red).Select(x => x.Value);!var g = this.ObservableForProperty(vm => vm.Green).Select(x => x.Value);!var b = this.ObservableForProperty(vm => vm.Blue).Select(x => x.Value);!!_color = Observable.CombineLatest(r, g, b, !(x, y, z) => new Color(x, y, z)).ToProperty(this, vm => vm.Color);!}!}ViewModel483つの値が ったら初回設定、以降はいずれかが変わったら設定
49.
View と Bindingpublicoverride void ViewDidLoad() {!this.Bind(this.ViewModel, vm => vm.Red, v => v.RedSlider.Value);!this.Bind(this.ViewModel, vm => vm.Green, v => v.GreenSlider.Value);!this.Bind(this.ViewModel, vm => vm.Blue, v => v.BlueSlider.Value);!!this.OneWayBind(this.ViewModel, !vm => vm.Color, !v => v.ColorView.BackgroundColor, !x => new UIColor(x.R, x.G, x.B, 1f));!}49iOSなのでUIColorに変換
50.
View で MultiBindingでもpublic override void ViewDidLoad() {!var r = this.ObservableForProperty(v => v.ViewModel.Red)!.Select(x => x.Value);!var g = this.ObservableForProperty(v => v.ViewModel.Green)!.Select(x => x.Value);!var b = this.ObservableForProperty(v => v.ViewModel.Blue)!.Select(x => x.Value);!!Observable.CombineLatest(r, g, b, !(x, y, z) => new UIColor(x, y, z, 1f))!.ObserveOn(RxApp.MainThreadScheduler)!.Subscribe(x => this.ColorView.BackgroundColor = x);!}50UIThread で