ReactiveCollectionを使ってると、
「うーん今回はObserveAddとObserveRemoveだけでいいかな?」
「それともObserveRemoveも入れたほうがいいかな?」
みたいなことで毎回ビミョーに悩んだりして無駄な思考を要してしまうので、
「いっそのこと最初から全部監視すればいいじゃん」
と思い立って作りました。
一応、大量のObserveが発動するのでその点ご留意ください(無視できるレベルだと思いますが)
public static class UniRxExtension
{
/// <summary>
/// ReactiveCollectionのあらゆる変更を監視して、1フレームに1回のみ通知する
/// </summary>
public static IObservable<Unit> ObserveAll<T>(
this IReadOnlyReactiveCollection<T> source)
{
return Observable.Merge(
source.ObserveCountChanged().AsUnitObservable(),
source.ObserveAdd().AsUnitObservable(),
source.ObserveRemove().AsUnitObservable(),
source.ObserveReplace().AsUnitObservable(),
source.ObserveMove().AsUnitObservable(),
source.ObserveReset().AsUnitObservable())
.BatchFrame();
}
}
↓ 使い方。返り値がIObservable<Unit>
であることにご注意ください。
SomeReactiveColelctionInstance
.ObserveAll()
.Subscribe(_ => SomeMethod())
.AddTo(this);