35. ReactiveProperty class
• ToReactivePropertyAsSynchronized methodも便利
• model // INotifyPropertyChangedの実装クラス
.ToReactivePropertyAsSynchronized(x => x.Name); //Nameプロパティと同期
• model // INotifyPropertyChangedの実装クラス
.ToReactivePropertyAsSynchronized(
x => x.Age, // Ageプロパティを
x => x.ToString(), // M -> VMの時は文字列に変換して
x => int.Parse(x)); // VM -> Mの時はintに変換する
36. ReactiveProperty class
• ToReactivePropertyAsSynchronized methodも便利
• model // INotifyPropertyChangedの実装クラス
.ToReactivePropertyAsSynchronized(
x => x.Age, // Ageプロパティを
x => x.Age.ToString(), // M -> VMの時は文字列に変換して
x => int.Parse(x), // VM -> Mの時はintに変換する
ignoreValidationErrorValue: true); // 変な値は通さない(次ページ参照)
37. ReactiveProperty class
• 値の検証をサポート
• // 何らかの方法でRPを作成
this.Hoge = xxxx.ToReactivePropertyAsSynchronized(…)
// 検証ロジックを設定(nullの時はOKでそうじゃないときはエラーメッセージ)
.SetValidateNotifyError(x =>
{
var x = 0;
if (int.TryParse(x, out x)) { return null; }
else { return "整数を入力してください"; }
});
38. ReactiveCommand class
• IObservable<bool>から生成可能なCommand
• public ReactiveCommand HogeCommand { get; private set; }
• コンストラクタで以下のように初期化
• this.HogeCommand = new ReactiveCommand(); // 常に実行可能なコマンド
• this.HogeCommand = source.ToReactiveCommand(); // IO<bool>がtrueの
時だけ実行可能なコマンド