/// <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 ISeriesHost that a series would like to use an axis.
        /// </summary>
        /// <param name="series">The series that would like to use the axis.
        /// </param>
        /// <param name="axis">The axis the series would like to use.</param>
        void ISeriesHost.RegisterWithAxis(Series series, IAxis axis)
        {
            if (series == null)
            {
                throw new ArgumentNullException("series");
            }
            if (axis == null)
            {
                throw new ArgumentNullException("axis");
            }

            axis.Register(series);
            if (!InternalActualAxes.Contains(axis))
            {
                InternalActualAxes.Add(axis);
            }
        }