/// <summary> /// Creates a new event-pattern observable which raises on an item updated in the repository. /// The observable yields: /// - the Item on the Add/Update action, /// - the NewItems the a Reset action, /// - none on the Remove action. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="r"></param> /// <returns></returns> public static IObservable <T> ItemUpdated <T>(this IObservableInventory <T> r) where T : IIdentifiable => Observable.Create <T>(observer => r.Changed.Subscribe(ep => { var action = ep.EventArgs.Action; if (action == ItemChangedAction.Add || action == ItemChangedAction.Update) { observer.OnNext(ep.EventArgs.Item); } else if (action == ItemChangedAction.Reset && ep.EventArgs.NewItems != null) { foreach (var item in ep.EventArgs.NewItems) { observer.OnNext(item); } } }));
/// <summary> /// Projects <see cref="IObservableInventory{T}"/> to <see cref="IObservableEnumerable{T}"/>. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="r"></param> /// <returns></returns> public static IObservableEnumerable <T> AsObservableEnumerable <T>(this IObservableInventory <T> r) where T : IIdentifiable => ObservableEnumerable.Create(r.Items, r.ItemUpdated());