【記事ツリー】
- スマホアプリ開発!《本編》
- スマホアプリ開発!《MasterDetailPage編》
- スマホアプリ開発!《ReactiveProperty編》
- スマホアプリ開発!《ファイル読み込み編》
- スマホアプリ開発!《リリース・署名編》
概要
Xamarin.Forms+ReactivePropertyでスマホアプリ開発!《本編》において、どのようにReactivePropertyを活用したのかといった話です。ReactivePropertyについての説明は次のページを参照してください。
【C#】ReactiveProperty全然分からねぇ!って人向けのFAQ集【修正済】
ReactiveProperty<T>編
コントロールのプロパティによく利用される型ですが、Xamarin.Formsでも使用できます。注意したいのは、Xamarin.FormsにはUpdateSourceTrigger
という概念が無く、言うなれば常にUpdateSourceTrigger="PropertyChanged"している状態だということです。
つまり、コントロールの操作によりBindingで紐づけされたデータが即時に更新され(OneWayToSource方向)、データを更新するとコントロールの内容が即座に書き換わります(OneWay方向)。Xamarin.FormsにOneTimeという概念は存在しないそうですので、OneWay辺りで代用しましょう。
ちなみに、「ReactiveProperty
をCombineLatest
で繋げながらReadOnlyReactiveProperty
を生成する」定番テクニックもXamarin.Formsでは使用できます。
ReactiveCollection<T>編
<Picker>
のItemSource
プロパティなどに利用される型ですが(以下略)。こちらはReactiveProperty<T>
と違い、XAMLにBindingする際は{Binding Hoge.Value}
ではなく{Binding Hoge}
でいいことに注意しましょう。
また、コンストラクタ以降一切変更する気がなければ、タダのList<T>
でも用を果たせます(ObservableCollection<T>
を使うのは変更通知のためなので)。
ところで、ReactiveCollection<T>
におけるT
って参照型しか使えないのはなぜなのでしょう? ObservableCollection<T>
なら値型でも大丈夫なのに……。
ReactiveCommand編
<Button>
のCommand
プロパティなどに(以下略)。Xamarin.Formsだからどうこうといった話は私が知る限りありませんので、普通にSubscribe
でイベントを貼り付けていきましょう。