OxyPlot图表中的可绑定注释

4
我想使用OxyPlot可视化时间序列,并使用注释标记一些时间点和数值级别,例如最小/最大值等。
我希望在WPF中通过绑定实现此功能,目前,我开始尝试使用 Plot 控件,两个轴和一个数据系列。这很好用,但我找不到一种方法将注释绑定到一个包含各种动态创建注释的ObservableCollection<Annontation>
<UserControl
    ...
    xmlns:oxy="http://oxyplot.org/wpf"
    ...
    >
    <Grid>
        ...
        <oxy:Plot>
            <oxy:Plot.Axes>
                <oxy:DateTimeAxis ... />
                <oxy:LinearAxis ... />
            </oxy:Plot.Axes>
            <oxy:Plot.Series>
                <oxy:StairStepSeries ... />
            </oxy:Plot.Series>
            <oxy:Plot.Annotations>
                <!--
                How do I bind to the ObservableCollection 'Annotations' in my ViewModel?
                Note, 'Annotations' property isn't available directly in Plot, either.
                -->
            </oxy:Plot.Annotations>
        </oxy:Plot>
    </Grid>
</UserControl>
2个回答

2

我遇到了一个类似的问题。为了帮助其他人,下面是如何使用OxyPlot解决这个问题:

如果你有未知数量的注释或系列,你应该使用:

 <oxy:PlotView Model="{Binding PlotModel}" />

在Xaml中,这个属性在您的ViewModel上。

public PlotModel PlotModel { get; set; }

对于此属性,您具有更大的灵活性。您不能像LineSeries.ItemSource一样设置PlotModel.Annotations,但您可以根据需要每次添加和删除多个注释。


听起来不错,但是很遗憾我不再使用OxyPlot了。但出于好奇,我稍后会尝试一下。谢谢 :) - Chris Tophski
代码后台的PlotModel是正确的方式。我已经尝试了两种变体(OxyPlot+MVVM和绑定与代码后台的PlotModel)多年,而MVVM方式非常有限。 - Patrick Stalph

1

经过近一年的等待后,我决定总结一下这段时间试错的经历。

基本上,我放弃了在我的WPF应用程序中使用OxyPlot的方法,所以如果读者更感兴趣的是使用OxyPlot的解决方案,很抱歉,这里可能找不到答案。

在谷歌搜索和前面提到的试错等等之后,我最终采用了一个基于Web的可视化解决方案(在我的情况下是Grafana)和一个时间序列数据库(在我的情况下是InfluxDB)。当然还有其他的可视化和数据源等等,但是对于我的情况来说,这是最合适的。我不会提供一个全面的列表,所以请自行谷歌寻找替代方案。

对于我的.Net案例来说,最有趣的事情是,我可以将我的Grafana图表的一部分嵌入到我的WPF窗口上的Web组件中,但是我最终没有使用这个解决方案,所以我不能再提供一个全面的解决方案了。重要的是,我可以通过Web技术在.Net中使用Grafana,所以没有进一步的限制。

同时,我深入研究了上述系统,并为我们的案例构建了一些非常有用的仪表板,快速构建了一些有趣的查询等等。即使您想创建自己的可视化,我也建议设置一个带有可视化平台、时间序列数据库(或任何其他数据库系统)和一些服务/守护程序/脚本运行的虚拟机。这对我很有帮助。
如果有人想添加什么,请随意。至少对于我的情况,这个问题已经得到了回答,所以我会关闭它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接