5

現在、COM ポートからライブ データを取得し、簡単に解釈できるように表示するプロジェクトを作成しています。その一環として、Dynamic Data Display を使用して折れ線グラフを作成しています。これもライブで実現したいと考えています。

私は現在、コレクションからデータをまとめてプロッタ用に読み取り可能な形式で出力する作業セットアップを持っていますが、これは私の静的サンプル データには問題ありませんが、データが頻繁に更新されることを考えると、これは最適化にはほど遠いのではないかと心配しています。 (時には1秒間に複数回)。データが変更されたという通知を常に送信するとグラフが更新されますが、常にすべてのデータを取得して新しいグラフ ソースを作成するのは効率的とは言えません。ビューモデルで次のコードを使用しています。

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;
    }
}

私はそれらを複数実行しており、それぞれが 1 つのグラフを表しています (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>

これについて知りたいことが 2 つあります。同じコードを何度もコピーする必要がないように、すべてのデータ出力を処理する 1 つの関数を作成することは可能ですか? さらに重要なことは、すべてのデータを何度も再収集するのではなく、コレクションが更新されるとすぐに折れ線グラフに値を追加するための最良の方法は何でしょうか?

4

0 に答える 0