Oxyplot不会在WPF视图中显示图形
本文关键字:显示 显示图 图形 视图 WPF Oxyplot | 更新日期: 2023-09-27 18:04:52
我在WPF中使用OxyPlot。试图在UI中显示PlotModels。图有时显示在UI中,有时不显示。
此代码用于由BackgroundWorker
初始化PlotModel
:
ViewModel:
this.pm = setUpModel();
data2plot();
使用以下方法:
private PlotModel _pm;
public PlotModel pm
{
get { return _pm; }
set { _pm= value; RaisePropertyChanged("pm"); }
}
private PlotModel setUpModel()
{
PlotModel pm = new PlotModel();
pm.IsLegendVisible = false;
var xAxis= new CategoryAxis();
pm.Axes.Add(xAxis);
var valueAxis = new LinearAxis();
pm.Axes.Add(valueAxis);
return pm ;
}
//tbl holds the data in the second column
private void data2plot(DataTable tbl)
{
var series = new OxyPlot.Series.LineSeries();
int i = 0;
foreach (DataRow row in tbl.Rows)
{
double val = double.Parse(row[1].ToString());
series.Points.Add(new DataPoint(i, val));
i++;
}
this.pm.Series.Add(series);
}
View中用于初始化模型的代码:
<Grid HorizontalAlignment="Left" Height="205" Margin="10,117,0,0" VerticalAlignment="Top" Width="308">
<oxypl:PlotView x:Name="plot" Model="{Binding pm,UpdateSourceTrigger=PropertyChanged}" Margin="10" Grid.Row="1">
</oxypl:PlotView>
</Grid>
与以下引用
xmlns:oxypl="http://oxyplot.org/wpf"
DataContext="{Binding Source={StaticResource Locator}, Path=ViewModel}"
绑定工作,所以我猜一定是我的PlotModel
有问题。
我不知道这是否相关,但DataTable tbl
是由Lazy<T>
类初始化的(与isThreadSafe=true
)。
当你添加到你的pm
成员时,pm
的值没有被更新-它是该成员的内容被更新,即setter永远不会被调用,所以RaisePropertyChanged事件永远不会发出,视图也不会被通知任何更改。建议您构建一个本地数据集,然后在最后用完整的数据集覆盖pm
,或者在完成时发出RaisePropertyChanged
事件。
我猜它有时工作的原因是视图第一次(也是唯一一次)从视图模型中读取内容时,您已经填充了它,所以您看到了一些东西,但随后没有更新。
还必须调用
pm.InvalidatePlot(true);
添加到系列后,以触发重绘