/// <summary>
        /// Update the axes when the specified data point's ActualDependentValue property changes.
        /// </summary>
        /// <param name="dataPoint">The data point.</param>
        /// <param name="oldValue">The old value.</param>
        /// <param name="newValue">The new value.</param>
        protected override void OnDataPointActualDependentValueChanged(DataPoint dataPoint, IComparable oldValue, IComparable newValue)
        {
            if (oldValue != null)
            {
                bool removed = DataPointsByActualDependentValue.Remove(oldValue, dataPoint);
                if (removed)
                {
                    DataPointsByActualDependentValue.Add(newValue, dataPoint);
                }
            }

            UpdateActualDependentAxis();
            UpdateDataPoint(dataPoint);
            base.OnDataPointActualDependentValueChanged(dataPoint, oldValue, newValue);
        }
        /// <summary>
        /// Called after data points have been loaded from the items source.
        /// </summary>
        /// <param name="newDataPoints">New active data points.</param>
        /// <param name="oldDataPoints">Old inactive data points.</param>
        protected override void OnDataPointsChanged(IList <DataPoint> newDataPoints, IList <DataPoint> oldDataPoints)
        {
            foreach (DataPoint dataPoint in newDataPoints)
            {
                DataPointsByActualDependentValue.Add(dataPoint.ActualDependentValue, dataPoint);
            }

            foreach (DataPoint dataPoint in oldDataPoints)
            {
                DataPointsByActualDependentValue.Remove(dataPoint.ActualDependentValue, dataPoint);
            }

            GetAxes();

            if (InternalActualDependentAxis != null && InternalActualIndependentAxis != null)
            {
                Action action = () =>
                {
                    AxesInvalidated = false;
                    UpdatingAllAxes = true;
                    try
                    {
                        UpdateActualIndependentAxis();
                        UpdateActualDependentAxis();
                    }
                    finally
                    {
                        UpdatingAllAxes = false;
                    }

                    if (AxesInvalidated)
                    {
                        UpdateDataPoints(ActiveDataPoints);
                    }
                    else
                    {
                        UpdateDataPoints(newDataPoints);
                    }

                    AxesInvalidated = false;
                };

                InvokeOnLayoutUpdated(action);
            }

            base.OnDataPointsChanged(newDataPoints, oldDataPoints);
        }