/// <summary>
        /// Removes data point's legend item when the data point is removed.
        /// </summary>
        /// <param name="dataPoint">The data point to remove.</param>
        protected override void RemoveDataPoint(DataPoint dataPoint)
        {
            base.RemoveDataPoint(dataPoint);
            if (dataPoint != null)
            {
                LegendItem legendItem = _dataPointLegendItems[dataPoint];
                _dataPointLegendItems.Remove(dataPoint);

                LegendItems.Remove(legendItem);
                UpdateLegendItemIndexes();
            }
        }
 /// <summary>
 /// Manage dynamic legend updates.
 /// </summary>
 /// <param name="sender">Component sending update.</param>
 /// <param name="ldea">Current state of legend.</param>
 private void Ipld_LegendChanged(ChartComponent sender, LegendDynamicEventArgs ldea)
 {
     foreach (var prev in ldea.PreviousItems)
     {
         if (!ldea.CurrentItems.Contains(prev))
         {
             LegendItems.Remove(prev);
         }
     }
     foreach (var curr in ldea.CurrentItems)
     {
         if (!LegendItems.Contains(curr))
         {
             LegendItems.Add(curr);
         }
     }
 }
 /// <summary>
 /// Common logic for leaving the chart.
 /// SHOULD be strict dual of ComponentEnter sequence.
 /// </summary>
 /// <param name="icelc">The context.</param>
 /// <param name="cc">The component leaving chart.</param>
 protected void ComponentLeave(IChartEnterLeaveContext icelc, ChartComponent cc)
 {
     foreach (var px in AllPhases)
     {
         px.Leave(cc);
     }
     if (cc is IProvideDataSourceRenderer ipdsr)
     {
         Unregister(ipdsr.Renderer);
     }
     else if (cc is IDataSourceRenderer idsr)
     {
         Unregister(idsr);
     }
     if (cc is IChartAxis ica)
     {
         Axes.Remove(ica);
     }
     if (cc is IProvideLegendDynamic ipld)
     {
         // detach the event
         ipld.LegendChanged -= Ipld_LegendChanged;
     }
     if (cc is IProvideLegend ipl)
     {
         foreach (var li in ipl.LegendItems)
         {
             LegendItems.Remove(li);
         }
     }
     if (cc is IRequireEnterLeave irel)
     {
         irel.Leave(icelc);
     }
     if (cc is IRequireChartTheme irct)
     {
         irct.Theme = null;
     }
 }