在WPF中更新动态数据显示图表的有效方法

时间:2014-03-17 12:36:08

标签: c# wpf mvvm dynamic-data-display

我目前正在创建一个项目,它将从我的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更新而不是一遍又一遍地重新收集所有数据,那么简单地将值添加到我的折线图中的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

“只要我的收藏集更新而不是一遍又一遍地重新收集所有数据,那么简单地将值添加到我的折线图中的最佳方法是什么?”

我建议您使用“ObservableCollection”来存储数据源。并朝这个方向看:

https://www.google.com/?gws_rd=ssl#q=observablecollection+notify+property+changed