WPF 中与 Oxyplot 的数据绑定

Phi*_*ans 4 c# data-binding wpf xaml oxyplot

我正在努力解决 WPF 项目中有关 OxyPlot 的几个问题。

首先,我可以使用 Plot 类或 PlotView 类。这两个类有什么区别?

理想情况下,我想对模型(或至少部分模型)和数据使用数据绑定。

如果我使用 PlotView,我可以对模型使用 Binding,如下所示:

<oxy:PlotView Model="{Binding Model}"/>
Run Code Online (Sandbox Code Playgroud)

如果我使用 Plot,我可以对数据使用数据绑定,例如

<oxy:Plot>
  <oxy:Plot.Series>
    <oxy:LineSeries ItemsSource="{Binding Points}" />
  </oxy:Plot.Series>
</oxy:Plot>
Run Code Online (Sandbox Code Playgroud)

我可以让这两个都工作,但是有没有办法对模型和数据使用绑定?

如果我使用 Plot 类和 Binding 来处理数据,我至少会使用 Binding 来处理 LineColor,如下所示

<oxy:Plot>
  <oxy:Plot.Series>
    <oxy:LineSeries ItemsSource="{Binding Points}" 
                        DataFieldX="X" 
                        DataFieldY="Y"
                        StrokeThickness="2"
                        MarkerSize="0"
                        LineStyle="Solid"
                        Color="{Binding LineColor}"
                        MarkerType="None"/>
  </oxy:Plot.Series>
</oxy:Plot>
Run Code Online (Sandbox Code Playgroud)

我根本无法让它发挥作用。曲线始终为绿色。我的 LineColor 属性是使用 OxyColor 类型定义的。这是错误的类型吗?

我知道我在同一篇文章中提出了几个问题,但我认为它们是非常密切相关的。

Jos*_*ose 5

首先,我可以使用 Plot 类或 PlotView 类。这两个类有什么区别?

我认为您在示例中看到了差异,如果您想绑定到模型,则必须使用oxy:PlotView. 如果你想绑定到LineSeries,那么你将不得不使用oxy:Plot控制。

我可以让这两个都工作,但是有没有办法对模型和数据使用绑定?

不,如最后一句所述,您不能同时绑定两者,但您可以像这样将 lineseries 添加到模型中(在您的示例中):

PlotModel model = new PlotModel();
List<DataPoint> Points = new List<DataPoint>();

LineSeries lineserie = new LineSeries
{
    ItemsSource = Points,
    DataFieldX = "x",
    DataFieldY = "Y",
    StrokeThickness = 2,
    MarkerSize = 0,
    LineStyle = LineStyle.Solid,
    Color = OxyColors.White,
    MarkerType = MarkerType.None,
};

model.Series.Add(lineserie);
Run Code Online (Sandbox Code Playgroud)

然后使用 绑定到模型,oxy:PlotView仅此而已。如果您想修改处理绘图行为的参数,则必须绑定到PlotController属性(以防万一,以供将来的工作)。

编辑:

Oystein Bjorke(OxyPlot 创建者)回答了这两个问题:

PlotView组件现在在所有平台上都是相似的,它仅包含ModelController属性。该Plot控件允许您定义轴、系列、注释等,并且这应该仅在基于 XAML 的平台中可用。