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)。

Oxyplot不会在WPF视图中显示图形

当你添加到你的pm成员时,pm的值没有被更新-它是该成员的内容被更新,即setter永远不会被调用,所以RaisePropertyChanged事件永远不会发出,视图也不会被通知任何更改。建议您构建一个本地数据集,然后在最后用完整的数据集覆盖pm,或者在完成时发出RaisePropertyChanged事件。

我猜它有时工作的原因是视图第一次(也是唯一一次)从视图模型中读取内容时,您已经填充了它,所以您看到了一些东西,但随后没有更新。

还必须调用

pm.InvalidatePlot(true);

添加到系列后,以触发重绘