protected override void UpdateCore()
        {
            if (Viewport == null || Viewport.Output == new Rect(0, 0, 0, 0) || DataSource == null)
            {
                return;
            }

            foreach (var m in Markers)
            {
                Plotter.MainCanvas.Children.Remove(m);
            }


            if (Markers.Count == 0)
            {
                return;
            }

            var transform = GetTransform();

            for (int i = 0; i < Markers.Count; i++)
            {
                var    offset = GetXValue(this);
                double X      = LineGraphWithPoints.GetXValue(Markers[i] as DependencyObject) + GetXValue(this);
                double Y      = LineGraphWithPoints.GetYValue(Markers[i] as DependencyObject);

                var p = transform.DataToScreen(new Point(X, Y));

                //Update the points
                double canvasy = p.Y - Markers[i].Height / 2;
                double canvasx = p.X - Markers[i].Width / 2;
                Canvas.SetTop(Markers[i], canvasy);
                Canvas.SetLeft(Markers[i], canvasx);

                if (canvasy < Plotter.MainCanvas.ActualHeight & canvasy > 0 & canvasx < Plotter.MainCanvas.ActualWidth & canvasx > 0)
                {
                    Plotter.MainCanvas.Children.Add(Markers[i]);
                }
            }
            ContentBounds = BoundsHelper.GetViewportBounds(GetPoints(), transform.DataTransform);
            base.UpdateCore();
        }
        protected override void UpdateItems()
        {
            if (Plotter != null)
            {
                foreach (var m in Markers)
                {
                    Plotter.MainCanvas.Children.Remove(m);
                }
                Markers.Clear();

                if (ItemsSource != null && ItemsSource.GetEnumerator().MoveNext())
                {
                    foreach (var p in ItemsSource)
                    {
                        var visualItem = this.ItemTemplate.LoadContent() as FrameworkElement;
                        visualItem.DataContext = p;
                        //Set the binding again to make it attach immediately
                        visualItem.SetBinding(LineGraphWithPoints.XValueProperty, visualItem.GetBindingExpression(LineGraphWithPoints.XValueProperty).ParentBinding);
                        visualItem.SetBinding(LineGraphWithPoints.YValueProperty, visualItem.GetBindingExpression(LineGraphWithPoints.YValueProperty).ParentBinding);

                        Markers.Add(visualItem);
                    }

                    var es = new Microsoft.Research.DynamicDataDisplay.DataSources.EnumerableDataSource <DependencyObject>(Markers);
                    es.SetXMapping(p => LineGraphWithPoints.GetXValue(p as DependencyObject) + GetXValue(this));
                    es.SetYMapping(p => LineGraphWithPoints.GetYValue(p as DependencyObject));
                    DataSource = es;


                    if (Viewport != null & Markers.Count > 1)
                    {
                        ((ChartPlotter)Viewport.Plotter).FitToView();
                    }
                }
            }
        }