ReactiveProperty + PrismでV <=> VM <=> Mを双方向で連携する
ReactiveProperty + Prism で、V <=> VM <=> M を相互連携するアプリのサンプルコードを書いておきます。
ゴール
- Model で設定した値が、View のテキストボックスに表示される
- View のテキストボックスで入力した値が、Model に反映される
Model
テキストを保持するReactivePropertySlim<string
型プロパティを用意します。バリデーションはいらないのでReactiveProperty
よりも動作が軽いこちらを使います。
1 | public class Model: BindableBase |
ViewModel
View(画面)のテキストボックスと Model で保持している値を紐付けます。
1 | public class ViewAViewModel : BindableBase |
View
ViewModel のプロパティを Binding します。ViewModel のテキストを表示、画面で入力したテキストを ViewModel に反映することができます。
1 | <!-- .Valueを忘れずに! --> |
メモリリーク対策
メモリリークを防止するため、ViewModel、Model では ReactiveProperty 関連のプロパティは Dispose を実装するとよいらしいです。
1 | private System.Reactive.Disposables.CompositeDisposable disposables = new System.Reactive.Disposables.CompositeDisposable(); |