WPF工具包 - 在代码中绑定LineSeries

时间:2017-10-11 15:27:02

标签: charts lineseries

我花了几天时间试图将我的数据模型绑定到lineseries。我工作得很好;但是,我想改变线条颜色。我知道在哪里改变颜色,但图表和系列会忽略我的绑定(是一个SolidColorBrush)。如果我在XAML中对颜色进行了硬编码,那么它就能工作;但是,如果我尝试将相同的属性绑定到我的视图模型中的color属性,它将无法工作。花了太多时间后,我放弃了两个原因。

  1. 它不会工作
  2. 我意识到我需要绑定' x' 图表中的视图模型数量,以显示多个系列 一次。
  3. 我最终在后面的代码中定义了我的系列,就像这样......

    LineSeries BuildLine(DosePointsViewModel model)
        {
            LineSeries series = new LineSeries();
    
            // styles
            Style poly = new Style(typeof(Polyline));
            poly.Setters.Add(new Setter(Polyline.StrokeProperty, model.LineColor));
            poly.Setters.Add(new Setter(Polyline.StrokeThicknessProperty, 3d));
            series.PolylineStyle = poly;
    
            Style pointStyle = new Style(typeof(LineDataPoint));
            pointStyle.Setters.Add(new Setter(LineDataPoint.BackgroundProperty, model.LineColor));
            series.DataPointStyle = pointStyle;
    
            // binding
            series.IsSelectionEnabled = false;
            series.IndependentValueBinding = new System.Windows.Data.Binding("Distance");
            series.DependentValueBinding = new System.Windows.Data.Binding("Dose");
    
            // X axis
            LinearAxis xAxis = new LinearAxis();
            xAxis.Title = "Distance";
            xAxis.ShowGridLines = false;
            xAxis.Interval = 1;
            xAxis.Orientation = AxisOrientation.X;
            series.IndependentAxis = xAxis;
    
            // Y axis
            LinearAxis yAxis = new LinearAxis(); //series.DependentRangeAxis as LinearAxis;
            yAxis.Maximum = 5000d;
            yAxis.Minimum = -100d;
            yAxis.Minimum = model.Points.Min(d => d.Dose) - model.Points.Min(d => d.Dose) * 0.50;
            yAxis.Maximum = model.Points.Max(d => d.Dose) + model.Points.Max(d => d.Dose) * 0.05;
            yAxis.ShowGridLines = true;
            yAxis.Orientation = AxisOrientation.Y;
            yAxis.Title = "Dose";
    
            Style s = new Style(typeof(Line));
            s.Setters.Add(new Setter(Line.StrokeProperty, new SolidColorBrush(Colors.LightBlue)));
            s.Setters.Add(new Setter(Line.StrokeThicknessProperty, 1d));
            yAxis.GridLineStyle = s;
            series.DependentRangeAxis = yAxis;
    
            return series;
        }
    

    现在,我的系列作品的颜色有效。当然,主要原因是我直接通过......

    设置颜色
    poly.Setters.Add(new Setter(Polyline.StrokeProperty, model.LineColor));
    pointStyle.Setters.Add(new Setter(LineDataPoint.BackgroundProperty, model.LineColor));
    

    所以,我的问题是这个。我希望能够在图表中添加多个系列;但是,当我尝试这样做时,只有最后一项被绑定。在代码内部,这是为每个正在创建的行系列完成的。只有最后一行系列添加到图表中。

    DosePointsViewModel model = new DosePointsViewModel(_snc, m.Id);
                LineSeries series = BuildLine(model);
                DoseChart.Series.Clear();
                DoseChart.Series.Add(series);
    

1 个答案:

答案 0 :(得分:0)

哇,因为我正在阅读我的问题,我意识到我在呼唤

DoseChart.Series.Clear();

这是一个有趣的发现。