public void TriggerPropertyChanged()
        {
            if (PropertyChangedEvent == null)
            {
                return;
            }

            LastPropGetter.TriggerPropertyChanged();
        }
        public CompositePathGetter
        (
            IEnumerable <IBindingPathLink <object> > pathLinks,
            PropertyType defaultValue
        )
        {
            _pathLinks = pathLinks;

            _defaultValue = defaultValue;

            if (pathLinks.IsNullOrEmpty())
            {
                PropGetters.Add(new SimplePropGetter <object>());
                return;
            }

            IObjWithPropGetter <object> previousPropGetter = null;

            foreach (var pathLink in _pathLinks)
            {
                IObjWithPropGetter <object> propGetter = pathLink.CreateGetter();

                PropGetters.Add(propGetter);

                if (previousPropGetter != null)
                {
                    IObjWithPropGetter <object> thePreviousPropGetter = previousPropGetter;
                    previousPropGetter.PropertyChangedEvent += () =>
                    {
                        propGetter.TheObj = thePreviousPropGetter.GetPropValue();
                    };
                }

                previousPropGetter = propGetter;
            }

            previousPropGetter.PropertyChangedEvent += () =>
            {
                if (this.PropertyChangedEvent == null)
                {
                    return;
                }

                if (!LastPropGetter.HasObj)
                {
                    _cachedValue.TheValue = _defaultValue;
                }
                else
                {
                    _cachedValue.TheValue = (PropertyType)LastPropGetter.GetPropValue();
                }

                PropertyChangedEvent?.Invoke();
            };
        }
 void SetValueFromLastPropGetterValue()
 {
     if (!LastPropGetter.HasObj)
     {
         _cachedValue.TheValue = _defaultValue;
     }
     else
     {
         _cachedValue.TheValue = (PropertyType)LastPropGetter.GetPropValue();
     }
 }