I have a stacked area chart set up with multiple series. The source of the data is an observable collection. When I add items to the observable collection, the chart does not update. When I bind the data directly without using multiple series, it updates fine. How can I get this working?
private ObservableCollection<ChartPoint> _kw1;
private ObservableCollection<ChartPoint> _kw2;
private Timer _timer;
void Window1_Loaded(object sender, RoutedEventArgs e)
{
_timer = new Timer(TimerCallback, null,TimeSpan.Zero, TimeSpan.FromSeconds(1));
RadChart1.DefaultView.ChartArea.AxisX.IsDateTime = true;
_kw1 = new ObservableCollection<ChartPoint>();
_kw2 = new ObservableCollection<ChartPoint>();
var seriesList = new List<ObservableCollection<ChartPoint>> { _kw1, _kw2 };
var lineDefinition1 = new StackedAreaSeriesDefinition();
var lineDefinition2 = new StackedAreaSeriesDefinition();
var series1 = new SeriesMapping { LegendLabel = "Paint Line", CollectionIndex = 0, SeriesDefinition = lineDefinition1 };
series1.ItemMappings.Add(new ItemMapping { DataPointMember = DataPointMember.YValue, FieldName = "Kw" });
series1.ItemMappings.Add(new ItemMapping { DataPointMember = DataPointMember.XValue, FieldName = "Timestamp" });
var series2 = new SeriesMapping { LegendLabel = "Fan 1", CollectionIndex = 1, SeriesDefinition = lineDefinition2 };
series2.ItemMappings.Add(new ItemMapping { DataPointMember = DataPointMember.YValue, FieldName = "Kw" });
series2.ItemMappings.Add(new ItemMapping { DataPointMember = DataPointMember.XValue, FieldName = "Timestamp" });
var seriesMappings = new SeriesMappingCollection {series1, series2};
RadChart1.SeriesMappings = seriesMappings;
RadChart1.ItemsSource = seriesList;
}
private void TimerCallback(object o)
{
Debug.WriteLine("Updating...");
if(!Dispatcher.CheckAccess())
{
Dispatcher.Invoke(new ThreadStart(() => TimerCallback(null)));
return;
}
_kw1.Add(new ChartPoint{ Kw = (new Random()).Next(0, 10), Timestamp = DateTime.Now});
_kw2.Add(new ChartPoint { Kw = (new Random()).Next(0, 10), Timestamp = DateTime.Now });
}
private ObservableCollection<ChartPoint> _kw1;
private ObservableCollection<ChartPoint> _kw2;
private Timer _timer;
void Window1_Loaded(object sender, RoutedEventArgs e)
{
_timer = new Timer(TimerCallback, null,TimeSpan.Zero, TimeSpan.FromSeconds(1));
RadChart1.DefaultView.ChartArea.AxisX.IsDateTime = true;
_kw1 = new ObservableCollection<ChartPoint>();
_kw2 = new ObservableCollection<ChartPoint>();
var seriesList = new List<ObservableCollection<ChartPoint>> { _kw1, _kw2 };
var lineDefinition1 = new StackedAreaSeriesDefinition();
var lineDefinition2 = new StackedAreaSeriesDefinition();
var series1 = new SeriesMapping { LegendLabel = "Paint Line", CollectionIndex = 0, SeriesDefinition = lineDefinition1 };
series1.ItemMappings.Add(new ItemMapping { DataPointMember = DataPointMember.YValue, FieldName = "Kw" });
series1.ItemMappings.Add(new ItemMapping { DataPointMember = DataPointMember.XValue, FieldName = "Timestamp" });
var series2 = new SeriesMapping { LegendLabel = "Fan 1", CollectionIndex = 1, SeriesDefinition = lineDefinition2 };
series2.ItemMappings.Add(new ItemMapping { DataPointMember = DataPointMember.YValue, FieldName = "Kw" });
series2.ItemMappings.Add(new ItemMapping { DataPointMember = DataPointMember.XValue, FieldName = "Timestamp" });
var seriesMappings = new SeriesMappingCollection {series1, series2};
RadChart1.SeriesMappings = seriesMappings;
RadChart1.ItemsSource = seriesList;
}
private void TimerCallback(object o)
{
Debug.WriteLine("Updating...");
if(!Dispatcher.CheckAccess())
{
Dispatcher.Invoke(new ThreadStart(() => TimerCallback(null)));
return;
}
_kw1.Add(new ChartPoint{ Kw = (new Random()).Next(0, 10), Timestamp = DateTime.Now});
_kw2.Add(new ChartPoint { Kw = (new Random()).Next(0, 10), Timestamp = DateTime.Now });
}