LoginSignup
6
2

More than 3 years have passed since last update.

ReactiveProperty v7.4.0 出てます

Last updated at Posted at 2020-09-18

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 も整理したので手動作業が結構減ったのでリリースやドキュメントの更新などが楽になりました。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2