动态数据显示LineGraph未更新

时间:2015-04-21 02:31:16

标签: c# wpf dynamic-data-display

我正在尝试将动态数据显示用于我的高级设计项目,但我遇到了困难。

我可以很好地创建图表,但除非我放大和缩小,否则我无法更新该行。

在大多数示例中,他们所要做的只是创建图表,然后当他们操纵数据时,图表会自行更新。

以下是我对图表使用的主要功能:

    private List<WindDAQ.WindDataPoint> Chart1Data;
    private EnumerableDataSource<WindDAQ.WindDataPoint> Chart1DataSource;

    private void InitializeCharts()
    {
        Chart1Data = new List<WindDAQ.WindDataPoint>();
        Chart1DataSource = new EnumerableDataSource<WindDAQ.WindDataPoint>(Chart1Data);
        Chart1DataSource.SetXMapping(x => Chart1XAxis.ConvertToDouble(x.Time));
        Chart1DataSource.SetYMapping(y => Chart1XAxis.ConvertToDouble(y.Lift));
        Chart1.AddLineGraph(Chart1DataSource, Colors.Blue, 2, "Lift");
        Chart1.Viewport.AutoFitToView = true;
    }




    private void UpdateChart()
    {
        for (int i = 0, count = itsDAQ.getStreamCount(); i < count; i++)
        {
            Chart1Data.Add(itsDAQ.getValue());
            if(Chart1Data.Count >= 300)
            { Chart1Data.RemoveAt(0); }
        }
    }
  • 创建窗口时会调用一次InitializeCharts()。

  • 在计时器事件上调用UpdateChart()。

  • WindDAQ.WindDataPoint包含提升,拖动,速度和时间数据。选择了提升和时间。

1 个答案:

答案 0 :(得分:0)

您应该使用observableCollection的AppendAsync方法。 您只更新用于创建可观察列表的列表,而不是图表的来源。

private void UpdateChart()
{
    for (int i = 0, count = itsDAQ.getStreamCount(); i < count; i++)
    {
        Chart1DataSource.AppendAsync(itsDAQ.getValue());

        if (Chart1DataSource.Collection.Count >= 300) // this part should work in a thread-safe
        { 
           Chart1DataSource.Collection.RemoveAt(0); // context and with some precaution 
        }
    }
}