Exemple #1
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="TItem"></typeparam>
        /// <typeparam name="TValue"></typeparam>
        /// <param name="source"></param>
        /// <param name="selector"></param>
        /// <param name="whenEmpty"></param>
        /// <param name="trackItemChanges">If true we subscribe to property changes for each item. This is much slower.</param>
        /// <returns>A tracker with Value synced with source.Max()</returns>
        public static MaxTracker <TValue> TrackMax <TItem, TValue>(this ReadOnlyObservableCollection <TItem> source, Expression <Func <TItem, TValue> > selector, TValue?whenEmpty, bool trackItemChanges)
            where TItem : class, INotifyPropertyChanged
            where TValue : struct, IComparable <TValue>
        {
            var onItemChanged = trackItemChanges
                                    ? source.ObserveItemPropertyChanged(selector, false)
                                    : null;
            var mapped = source.AsMappingView(selector.Compile(), onItemChanged);

            return(new MaxTracker <TValue>(mapped, mapped.ObserveCollectionChangedSlim(false), whenEmpty));
        }