7.3 は特に記事書いてないので、ここでは 7.3 と 7.4 で追加されたものを書いていこうと思います。
ToReactivePropertySlimAsSynchronized 拡張メソッド (7.3 で追加)
INotifyPropertyChanged
インターフェースを実装したクラスのプロパティと同期する ReactivePropertySlim<T>
を生成する ToReactivePropertySlimAsSynchronized
拡張メソッドを追加しました。
以下のような感じです。scheduler の設定と ignoreValidationErrorValue が無い以外は ToReactivePropertyAsSynchronized
と同じです。
var p = new Person { Name = "hoge" };
var rp = p.ToReactivePropertySlimAsSynchronized(x => x.Name);
ReactivePropertyScheduler.SetDefaultSchedulerFactory メソッド (7.4 で追加)
今までは ReactiveProperty や ReactiveCollection がイベントをディスパッチするために使う IScheduler
のインスタンスの指定方法は 2 種類しかありませんでした。
-
ReactivePropertyScheduler.SetDefault(...)
でグローバルに設定 - コンストラクタかファクトリーメソッドの
scheduler
引数で明示的に指定
今回追加した ReactivePropertyScheduler.SetDefaultSchedulerFactory
は、ReactiveProperty や ReactiveCollection が生成されるタイミングで IScheduler
を生成する処理を指定できます。なので WPF だと App クラスの Startup イベントで以下のような設定をしておくと、インスタンス生成時の Dispatcher を使ってイベントをディスパッチするようにできます。
private void Application_Startup(object sender, StartupEventArgs e)
{
ReactivePropertyScheduler.SetDefaultSchedulerFactory(() =>
new DispatcherScheduler(Dispatcher.CurrentDispatcher));
}
ViewModel などが、必ず自分が紐づく UI スレッド上で作られるという前提があるなら、この方法で複数 UI スレッドがあっても動くようにはなると思います。
個人的には複数の UI スレッドを WPF で作るのは、やらないですむならやらないことをお勧めしますが、今までは ReactiveProperty を使ってると割と詰んでいたけど、一応使えるようにしたという感じです。
まとめ
GitHub Actions も整理したので手動作業が結構減ったのでリリースやドキュメントの更新などが楽になりました。