private void OnTrackedItemChanged(IPropertyTracker tracker, object sender, PropertyChangedEventArgs e, SourceAndValue <INotifyPropertyChanged, TProperty> sourceAndValue)
 {
     this.OnTrackedItemChanged(
         ((PropertyPathTracker <TItem, TProperty>)tracker.PathTracker).Source,
         sender,
         e,
         sourceAndValue);
 }
        IPropertyTracker IPropertyPathTracker.GetNext(IPropertyTracker tracker)
        {
            for (var i = 0; i < this.parts.Count - 1; i++)
            {
                var candidate = this.parts[i];
                if (ReferenceEquals(candidate, tracker))
                {
                    return(this.parts[i + 1]);
                }
            }

            return(null);
        }
        internal PropertyPathTracker(TSource source, IReadOnlyList <INotifyingGetter> path)
        {
            var items = new IPropertyTracker[path.Count];

            for (var i = 0; i < path.Count; i++)
            {
                items[i] = path[i].CreateTracker(this);
            }

            this.parts      = items;
            items[0].Source = source;
            this.Refresh();
            this.Last.TrackedPropertyChanged += this.OnTrackedPropertyChanged;
        }
 internal TtlTypeBuilder(IPropertyTracker propertyTracker)
 {
     _currentOptions.PropertyTracker = propertyTracker;
 }
 internal CombinedCachingKeyBuilder(IPropertyTracker <T> propertyTracker)
 {
     _propertyTracker = propertyTracker;
 }
 private void OnTrackedPropertyChanged(IPropertyTracker tracker, object sender, PropertyChangedEventArgs e, SourceAndValue <INotifyPropertyChanged, TValue> sourceandvalue)
 {
     this.TrackedPropertyChanged?.Invoke(tracker, sender, e, sourceandvalue);
 }