Edited at

OxyPlotのコントロール(PlotView)をリアルタイムにアップデートする方法

More than 1 year has passed since last update.


はじめに

OxyPlotのコントロールPlotViewはバインドしたデータを変更しただけでは更新がされません。

この記事は変更したデータをリアルタイムに反映するための設定の備忘録です。


変更したデータをリアルタイムに反映させる方法

OxyPlotこのページに記述してあります。

(1) PlotViewコントロールのModelプロパティを変更

(2) PlotViewコントロールのInvalidateを呼ぶ

(3) PlotModelInvalidataを呼ぶ

自分で設定したときに、上記説明と違ったので以下に例を載せます。


具体例


PlotViewRefreashExample.cs

var myPlotModel = new PlotModel(); //PlotModelの生成

myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Minimum = 0.0, Maximum = 1.0 }); //x軸の設定
myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = 0.0, Maximum = 1.0 }); // y軸の設定

plotView1.Model = myPlotModel; // --(1) , plotView1はPlotViewコントロール

LineSeries myLine = new LineSeries(); //データインスタンスを生成

myPlotModel.Series.Add(myLine); //データをPlotModelへバインド

for(int i = 0; i < 10; i++)
{

myLine.Points.Add(new DataPoint(i, i)); //データの変更

plotView1.Invalidate(); // --(2) , ここでデータの変更が反映され、PlotViewが更新される

myPlotModel.Axes.Clear(); // 軸の変更のため、以前の設定をクリア
myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Minimum = 0.0, Maximum = i }); //x軸の設定
myPlotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Minimum = 0.0 , Maximum = i }); //y軸の設定
myPlotModel.InvalidatePlot(true); // -- (3) , ここで軸設定が反映され、PlotViewが更新される

}


例に示したように、PlotViewコントロールのInvalidateを呼ぶだけでは、軸の設定は反映されないので注意してください。