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