ReactiveProperty v9.1 をリリースしました
ReactivProperty v9.1 をリリースしました。
今回のアップデートの対応は主に Blazor で ReactiveProperty を使用する場合の機能改善になります。
- 
ValidatableReactiveProperty<T>でForceNotifyを呼び出した際に正しくバリデーションが行われないケースがあった問題を修正 - 
ICommandにCanExecuteと逆の結果を返すIsDisabled拡張メソッドを追加しました - 
ReactivePropertiesValidatorコンポーネントでValidatableReactiveProperty<T>に対応しました 
更新内容ピックアップ
 コマンド系クラスに関する IsDisabled 拡張メソッド
IsDisabled 拡張メソッドも追加しています。こちらは CanExecute メソッドと逆の結果を返す拡張メソッドになります。button などで disabled 属性に使用することを想定しています。
あっても無くても大差ないといえばそうですが、あったほうが便利なので追加しました。以下のように使用します。
<button 
  @onclick="() => someViewModel.SomeCommand.Execute()" 
  disabled="@someViewModel.SomeCommand.IsDisabled()">
  Click Me
</button>
IsDisabled がない場合は disabled=@(!someViewModel.SomeCommand.CanExecute()) のように書きますが、括弧があるのが地味にめんどくさいので拡張メソッドとして追加しました。
 ReactivePropertiesValidator コンポーネントの改良
ReactiveProperty v9.0.0 で ValidatableReactiveProperty<T> を追加しました。個人的には ReactiveProperty<T> は今後 ReactivePropertySlim<T> と ValidatableReactiveProperty<T> に置き換える方がよいと考えています。
ここで問題になるのが利用者は少ないと思うので、誰からも突っ込まれてはいないのですが Blazor の EditForm のバリデーション機能と ReactiveProperty<T> のバリデーション機能を連携させるための ReactivePropertiesValidator コンポーネントに対して ValidatableReactiveProperty<T> の場合でも正しく動くようにしました。
今回は、これで Blazor で ReactiveProperty を導入する場合でも ReactiveProperty<T> は、使うことが無くなると思います。
Blazor で ReactiveProperty 使うメリットあるの?
WPF とかほどではないですが ViewModel 的なレイヤーを設けるのであれば、そこそこ使えると思います。
Blazor は変更通知とかなくても普通に画面更新はちゃんとされたりするので、あまり ReactivePropertySlim<T> や ValidatableReactiveProperty<T> の恩恵は感じないケースが多いと思いますが AsyncReactiveCommand などは実行可否を複数コマンドで同期とったりできるので便利だと思います。
まとめ
ということで v9 系はひと段落です。あとはドキュメント類を…。
Discussion