ReactivePropertyを用いたViewModelとModelの双方向バインド

公開日:2019-04-19
最終更新:2019-04-19

ViewModelとModelがReactiveProperty同士かつ、Modelのメンバがプリミティブ型の場合の双方向バインディングの記述例

使用ケースとしては、例えばViewにCheckBoxをもち、そのIsCheckedプロパティをViewModelのReactivePropertyとバインドし、さらにそれをModelのReactivePropertyにも反映したい場合がある(あった)。

Model

    public class Model : INotifyPropertyChanged, IDisposable  
    {  
        private readonly CompositeDisposable _disposable = new CompositeDisposable();  

        public ReactivePropertySlim<bool> CheckState;  

        public Model()  
        {  
            CheckState = new ReactivePropertySlim<bool>(false).AddTo(_disposable);  
        }  

        public event PropertyChangedEventHandler PropertyChanged;  

        public void Dispose()  
        {  
            _disposable?.Dispose();  
        }  
    }  

ViewModel

    public class MainWindowViewModel : BindableBase  
    {  
        private readonly CompositeDisposable _disposable = new CompositeDisposable();  

        private readonly Model _model;  

        public ReactiveProperty<bool> IsChecked;  

        public MainWindowViewModel(Model model)  
        {  
            _model = model;  
            // ToReactivePropertyAsSynchronizedの引数(parameterSelector)で.Valueをつけるだけ  
            IsChecked = _model.CheckState.ToReactivePropertyAsSynchronized(state => state.Value).AddTo(_disposable);  
        }  
    }  

要点としては、ToReactivePropertyAsSynchronizedの引数parameterSelectorで、ラムダの引数に.Valueをつければよいということ。

IsChecked = _model.CheckState.ToReactivePropertyAsSynchronized(state => state.Value).AddTo(_disposable);

注意

このやり方がベストかはわからない、ただ動く。

記事が少しでもいいなと思ったらクラップを送ってみよう!
22
+1
@katylttoの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする