Ejemplo n.º 1
0
        /// <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);
                }
            }
        }));
Ejemplo n.º 2
0
 /// <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());