/// <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); } }