最近BlogがReactivePropertyのリリース日記になってる感じがありますが…。v2.1.8をリリースしました。
v2.1.8
追加
- Helpers名前空間にリアルタイムにコレクションの要素をフィルタリングするコレクション FilteredReadOnlyObservableCollection
を追加しました。
解説
ObserveElementXXXXメソッドを追加したときに、コレクションの増減に対応するコードまで入れるとリアルタイムにコレクションから条件を満たす要素を選択できるという例を示しました。
このコードに順序の管理を加えて、リアルタイムフィルタリングをするコレクションを作成しました。
テストコードからの抜粋になりますが、以下のように使います。
var source = new ObservableCollection<Person>(new[] { new Person { Name = "tanaka1", IsRemoved = true }, new Person { Name = "tanaka2", IsRemoved = false }, new Person { Name = "tanaka3", IsRemoved = false }, }); // 初期状態ではtanaka1のみが対象 var filtered = source.ToFilteredReadOnlyObservableCollection(x => x.IsRemoved); filtered.Select(x => x.Name).Is("tanaka1"); filtered.Count.Is(1); // 無関係の要素を追加しても変わらない source.Add(new Person { Name = "tanaka4", IsRemoved = false }); filtered.Select(x => x.Name).Is("tanaka1"); filtered.Count.Is(1); // プロパティを変更してフィルターの対象になった場合は、その要素が追加される source[3].IsRemoved = true; filtered.Select(x => x.Name).Is("tanaka1", "tanaka4"); filtered.Count.Is(2); source.Clear(); filtered.Count.Is(0);