使用带有垂直系列的Mappers.Xy <double>时如何访问索引?

时间:2017-11-16 10:29:18

标签: c# livecharts

我正在尝试使用基于双精度的垂直系列来理解Mappers.XY类。为了测试它,我希望Y轴的所有偶数索引都是红色填充但是.Fill似乎只使用X值。这是我的代码和结果:

var RedBrush = new SolidColorBrush(Color.FromRgb(238, 83, 80));

Mapper = Mappers.Xy<double>()
    .X((value, index) => value)
    .Y((value, index) => index)
    .Fill(index => index % 2 == 0 ? RedBrush : null)
    .Stroke(index => index % 2 == 0 ? RedBrush : null);

只有在X值如此处所示时才会出现红条: Red X-values我甚至将.Fill更改为基于值但没有变化。

编辑:我认为我已经将问题缩小到使用.Fill的默认方法,即:

public CartesianMapper<T> Fill(Func<T, object> predicate);

我认为这会使用double作为填充的基础,在我的例子中,它将是X值。相反,我应该使用.Fill的重载,它似乎将索引视为一个int ...这就是我想要的:

 public CartesianMapper<T> Fill(Func<T, int, object> predicate);

问题在于我不确定如何使用它。而不是:

.Fill(index => index % 2 == 0 ? RedBrush : null)
它应该是什么?我的lamda技能处于新手水平。

***以前的文字可以被忽视......

我已经在这里查看了类型和配置以获取帮助:https://lvcharts.net/App/examples/v1/wpf/Types%20and%20Configuration,更具体地说,我正在努力使这两个概念适应我自己:

  
      
  1. 系列收集级别
  2.         

    定义Series集合实例时,您也可以传递默认配置,此配置将覆盖全局配置,并且仅当Series配置为null时才会设置:

  var mapper = Mappers.Xy<MyClass>().X(v => v.XProp).Y(v => v.YProp);
  var seriesCollection = new SeriesCollection(mapper);
  myChart.SeriesCollection = seriesCollection;
  
      
  1. 在特定系列
  2.         

    最后,您还可以为一个系列定义一个映射器,这将覆盖&gt;全局和SeriesCollection配置:

var mapper = Mappers.Xy<MyClass>().X(v => v.XProp).Y(v => v.YProp);
var pieSeries = new PieSeries(mapper);

问题是这些示例使用ObservablePoints和我没有的属性,因为我只是使用双打。

有人知道是否可以仅使用双打来做到这一点?任何替代方案?

1 个答案:

答案 0 :(得分:0)

您需要更改.Fill的lambda表达式,如下所示:

    var Mapper = Mappers.Xy<double>()
            .X((value, index) => value)
            .Y((value, index) => index)
            .Fill((value, index) => index % 2 == 0 ? RedBrush : null);

由于某些原因,你的表达式中似乎lambda表达式正在评估值%2而不是索引%2。

下面是使用映射器的行系列图表的图像: Row series chart