/// <summar
        /// Ensures that ISeriesHost is in a consistent state when axes collection is
        /// changed.
        /// </summary>
        /// <param name="sender">Event source.</param>
        /// <param name="e">Event arguments.</param>
        private void OnAxesCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            if (e.NewItems != null)
            {
                foreach (IAxis axis in e.NewItems)
                {
                    if (!InternalActualAxes.Contains(axis))
                    {
                        InternalActualAxes.Add(axis);
                    }
                }
            }
            if (e.OldItems != null)
            {
                foreach (IAxis axis in e.OldItems)
                {
                    if (!axis.IsUsed)
                    {
                        InternalActualAxes.Remove(axis);
                    }
                    else
                    {
                        throw new InvalidOperationException(Properties.Resources.Chart_OnAxesCollectionChanged_AnAxisCannotBeRemovedFromTheChartWhenItIsInUseByAnObject);
                    }
                }
            }

            NotifyCollectionChangedEventHandler handler = AxesChanged;

            if (handler != null)
            {
                handler(sender, e);
            }
        }
        /// <summary>
        /// Signals to the Chart that a Series no longer needs to use the axis
        /// within this series host.
        /// </summary>
        /// <param name="series">The Series object that no longer needs to use
        /// the axis.</param>
        /// <param name="axis">The axis that the Series no longer needs to use.
        /// </param>
        void ISeriesHost.UnregisterWithAxis(Series series, IAxis axis)
        {
            if (series == null)
            {
                throw new ArgumentNullException("series");
            }
            if (axis == null)
            {
                throw new ArgumentNullException("axis");
            }
            if (!ActualAxes.Contains(axis))
            {
                throw new InvalidOperationException(Properties.Resources.Chart_UnregisterWithSeries_OneAxisCannotBeUsedByMultipleCharts);
            }

            axis.Unregister(series);
            // If axis is no longer used and is not in external axes collection
            if (!axis.IsUsed && !Axes.Contains(axis))
            {
                InternalActualAxes.Remove(axis);
            }
        }