ReactiveProperty v7.12.0 をリリースしました
ReactiveProperty v7.12.0 をリリースしました。
前に Zenn でリリースの記事を書いたのが v7.10.0 なので v7.11.0 の更新内容も含めてここで紹介したいと思います。
v7.11.0 で追加された機能
EventToReactiveCommand
の Command
の CanExecute
とバインドされているコントロールの IsEnabled
プロパティの同期をとるようにしました。
@ryuix さんが以下のプルリクで追加してくれました。ありがとうございました。
この機能はデフォルトで有効になるため過去と同じように同期しないようにしたい場合は EventToReactiveCommand
の AutoEnable
プロパティに false
を指定してください。
v7.12.0 で追加された機能
2 つの変更点があります。
IReactiveProperty インターフェースに ForceNotify メソッドを追加しました
ReactiveProperty<T>
も ReactivePropertySlim<T>
も強制的に値を発行するための ForceNotify
メソッドを持っていますが IReactiveProperty
インターフェースには定義されていませんでした。
今回のバージョンアップで IReactiveProperty
インターフェースに ForceNotify
メソッドが追加されました。
EventToReactiveCommand がコマンドの Execute を呼び出す際に強制的に UI スレッドにディスパッチしていた問題を修正しました
タイトルの通りのことが行われていたため、必ず 1 テンポ遅れて ICommand
の Execute
メソッドが呼び出されていました。
例えば Closing
イベントに紐づけていた場合には Closing
イベントが終わった後に Execute
メソッドが呼ばれていました。
そのため以下のように挙動を変えました。
ReactivePropertyScheduler.Default
にディスパッチを行うように変更しました。
WPF の場合は ReactivePropertyWpfScheduler
を使うように App
の Startup
イベントで設定しておくと UI スレッド上の場合には即座に呼び出されて、そうでない場合は UI スレッド上で呼び出されるようにディスパッチされます。
スレッドのディスパッチを行わずに直接現在のスレッド上で Execute
メソッドが呼ばれるようにしたい場合は CallExecuteOnScheduler
プロパティを false
に指定してください。
Discussion