This is because I did not update line data. Here is the new code:
Action UpdateData = delegate()
{
((LineGraph)plotter.Children.ElementAt(startIndex + i)).DataSource = ds;
((LineGraph)plotter.Children.ElementAt(startIndex + i)).LinePen = new Pen(new SolidColorBrush(Colors.Green), 1);
((PointsGraphBase)plotter.Children.ElementAt(startIndex + i + 1)).DataSource = ds;
((MarkerPointsGraph)plotter.Children.ElementAt(startIndex + i + 1)).Marker = new CirclePointMarker { Size = 5, Fill = Brushes.Red };
};
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, UpdateData);
Here you can notice that not only marker data are updated, the line data also need to be updated. There is a DataSource for markers, and there is a DataSource for line. If you designate both sources, and you update both colors, you should be able to see lines and markers both.