以编程方式将系列添加到 OxyPlot 图表:没有显示

Posted

技术标签:

【中文标题】以编程方式将系列添加到 OxyPlot 图表:没有显示【英文标题】:Adding series to OxyPlot chart programmatically: nothing displayed 【发布时间】:2016-05-16 15:10:19 【问题描述】:

我正在尝试在设置图表类型的场景中使用 OxyPlot,然后以编程方式向其中添加 1 个或多个系列。为此:

在 XAML 视图中,我只需添加一个 PlotView 控件。 在代码中,我的类有一个PlotModel 属性(通知更改)和一个AddSeries 方法。每当调用它时,如果尚未配置,我会设置绘图模型(我创建一个新的PlotModel 对象并添加一个LinearAxis),创建一个随机数据LineSeries,并将其添加到Series 集合中情节模型。最后,我在它上面调用InvalidatePlot(true) 来强制它重绘。

但是,当我执行此代码时,什么都没有显示,这不会引发错误。

我搜索了一下,但我发现的唯一代码示例是指 XAML 视图绑定到绑定数据源的典型场景;但在这里我每次都根据图表类型和系列计数重新创建 PlotModel。您可以在这里找到一个虚拟复制解决方案:http://1drv.ms/1R8EFBc。只需编译并运行,然后单击添加系列。有人可以提出解决方案吗?

【问题讨论】:

【参考方案1】:

绑定的属性PlotModel 永远不会更新,原因是:

private void SetupPieChart()

    if (_plot == null) _plot = new PlotModel();
    else _plot.Axes.Clear();

更改为以下内容,它应该可以工作:

private void SetupPieChart()

    if (PlotModel == null) PlotModel = new PlotModel();
    else PlotModel.Axes.Clear();

自:

private PlotModel _plot;
public PlotModel PlotModel

    get  return _plot; 
    set
    
        _plot = value;
        OnPropertyChanged(); // <=== update here
    

【讨论】:

谢谢,怪我 :),没注意到,不好意思问了 :) @Naftis 你能把你的代码发布在创建图表先生吗? 在我的例子中,我使用 MVVM 框架 (Caliburn Micro) 并在 VM 代码中创建 PlotModel,将其作为可观察属性公开。该视图只有一个 Plot 控件,其模型属性绑定,例如 Model="Binding Path=PlotModel,Mode=OneWay"。虚拟机代码很简单,但是太长了,无法作为评论发表:请在pastebin.com/1EV1cV6D找到它。

以上是关于以编程方式将系列添加到 OxyPlot 图表:没有显示的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin图表开发基础教程OxyPlot框架

Xamarin图表开发基础教程OxyPlot框架

OxyPlot 中日期时间轴上的不规则间隔

以编程方式将系列添加到 Dundas TreeMap

MS Access 2003 - 有没有办法以编程方式定义图表的数据?

Xamarin.Forms - oxyplot 不在 CollectionView 内显示