WPF中使用Oxyplot进行数据绑定

4

我在WPF项目中遇到了几个关于OxyPlot的问题。

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

理想情况下,我希望使用数据绑定来处理Model(或至少部分)和数据。

如果我使用PlotView,则可以为模型使用绑定,像这样:

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

如果我使用Plot,我可以为数据使用数据绑定,类似于:
<oxy:Plot>
  <oxy:Plot.Series>
    <oxy:LineSeries ItemsSource="{Binding Points}" />
  </oxy:Plot.Series>
</oxy:Plot>

我可以让这两个都工作,但是有没有一种方法可以同时为模型和数据使用绑定?

如果我使用Plot类和数据绑定,我至少想要像这样为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>

我完全无法让它起作用。曲线总是绿色的。我的LineColor属性定义为OxyColor类型。这是错误的类型吗?

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


忘掉绑定Color属性的问题吧。如果你使用OxyColorConverter,它会起作用,就像示例应用程序中一样。 - Phil Jollans
1个回答

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

然后你使用oxy:PlotView将数据绑定到模型中即可。如果您想修改与图形行为相关的参数,必须绑定到PlotController属性(以备将来工作)。
编辑: Oystein Bjorke(OxyPlot创建者)回答了两个问题,并表示: 在所有平台上,PlotView组件现在都是相似的,它只包含ModelController属性。 Plot控件允许您定义轴、系列、注释等,这应该仅在基于XAML的平台上才能使用。

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