ReactiveProperty 7.10.0 をリリースしました
GitHub の Releases には毎回変更点を書いているのですが、日本語でのリリース情報を最近さぼっていました。なので前回書いた 7.8.0 以降の以下のバージョンでの更新内容について紹介します。
- 7.8.1
- 7.8.2
- 7.8.3
- 7.9.0
- 7.10.0
7.8.1
IFilteredObservableCollection
でソースのコレクションが Reset
イベントを発行した場合に過去のバージョンでは未サポートでしたが、このバージョンから Reset
イベントにも対応しました。
7.8.2/7.8.3
INotifyPropertyChanged
インターフェースの拡張メソッドの ObserveProperty
で以下の不具合があったため修正しました。
-
ObserveProperty
でobj.ObserveProperty(x => x.AProperty.BProperty)
のようにネストしたプロパティを指定したときに、プロパティの途中にINotifyPropertyChanged
を実装していない型があると正しく動作しない不具合に対応しました。 -
ObserveProperty
でobj.ObserveProperty(x => x.AProperty.BProperty)
のようにネストしたプロパティを指定したときに、プロパティの途中の値が別の型に変わったときに正しく動作しない不具合に対応しました。
7.9.0
-
ObservableCollection
やReadOnlyObservableCollection
やIFilteredObservableCollection
ように定義されているObserveElementPropertyChanged
,ObserveElementObservableProperty
とObserveElementProperty
拡張メソッドを、その他のコレクションに定義するためのヘルパークラスのReactive.Bindings.CollectionUtilities
を追加しました。
以下のように使用します。
public class YourCollectionExtensions
{
public static IObservable<PropertyPack<TElement, TProperty>> ObserveElementProperty<TElement, TProperty>(this YourCollection<TElement> source, Expression<Func<TElement, TProperty>> propertySelector, bool isPushCurrentValueAtFirst = true)
where TElement : class, INotifyPropertyChanged =>
CollectionUtilities.ObserveElementProperty(source, propertySelector, isPushCurrentValueAtFirst);
public static IObservable<PropertyPack<TElement, TProperty>> ObserveElementObservableProperty<TElement, TProperty>(this YourCollection<TElement> source, Expression<Func<TElement, IObservable<TProperty>>> propertySelector)
where TElement : class =>
CollectionUtilities.ObserveElementObservableProperty(source, propertySelector);
public static IObservable<SenderEventArgsPair<TElement, PropertyChangedEventArgs>> ObserveElementPropertyChanged<TElement>(this YourCollection<TElement> source)
where TElement : class, INotifyPropertyChanged =>
CollectionUtilities.ObserveElementPropertyChanged<YourCollection<TElement>, TElement>(source);
}
7.10.0
WPF アプリケーション用に最適化された ReactivePropertyWpfScheduler
を追加しました。
従来のデフォルトの SynchronizationContextScheduler
では Window
のコンストラクタや Loaded
イベント内で ReactiveProperty
の Value
プロパティを書き換えると画面上での UI の検証エラーの表示と ReactiveProperty
の検証エラーの状態に不整合が起きていました。(ReactiveProperty
には検証エラーではない値が入っている状態でも画面上に赤枠が表示される。)
ReactivePropertyWpfScheduler
を使用すると、この問題に対応できます。
WPF プロジェクトの App
クラスの Startup
イベントで以下のように初期化をしてください。
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using Reactive.Bindings;
using Reactive.Bindings.Schedulers;
namespace WpfApp1
{
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
ReactivePropertyScheduler.SetDefault(new ReactivePropertyWpfScheduler(Dispatcher));
}
}
}
まとめ
ということで、直近の更新内容を纏めました。ソースコードは GitHub から確認してください。Issue なども GitHub にお願いします。
プロジェクトへの導入には NuGet をご利用ください。
今回の WPF 用のスケジューラーは ReactiveProperty.WPF パッケージにあります。
Discussion