5

我目前正在创建一个项目,它将为我从 COM 端口获取实时数据,然后显示它以便于解释。其中一部分是使用动态数据显示创建折线图,我也希望在现场进行。

我目前有一个工作设置,可以将集合中的数据汇总在一起并以绘图仪的可读格式输出,虽然这对于我的静态样本数据来说很好,但考虑到数据会更新很多,我担心这远未优化(有时每秒多次)。总是发送数据更改的通知会使图形刷新,但总是提取所有数据并创建新的图形源似乎远没有效率。我在我的视图模型中使用以下代码:

private CompositeDataSource _AccelXData;
public CompositeDataSource AccelXData
{
    get
    {
        var xData = new EnumerableDataSource<int>(dataItems.Select(v => v.id));
        xData.SetXMapping(x => x);
        var yData = new EnumerableDataSource<double>(dataItems.Select(v => v.accelX));
        yData.SetYMapping(y => y);
        _AccelXData = xData.Join(yData);
        return _AccelXData;
    }
}

我有多个正在运行,每个代表一个图形(例如 x、y 和 z 轴上的加速度)。它们必须遵循以下示例图表:

<d3:ChartPlotter Name="plotter" DockPanel.Dock="Top" Margin="5">
    <d3:LineGraph DataSource="{Binding AccelXData}" />
    <d3:LineGraph DataSource="{Binding AccelYData}" />
    <d3:LineGraph DataSource="{Binding AccelZData}" />
</d3:ChartPlotter>

我想知道两件事:是否可以编写一个函数来处理所有数据输出,而我不必一遍又一遍地复制相同的代码?更重要的是,当我的 Collection 更新而不是一遍又一遍地重新收集所有数据时,将值简单地添加到我的折线图中的最佳方法是什么?

4

0 回答 0