WPF 工具包 - 在代码隐藏中绑定 LineSeries
WPF Toolkit - Binding LineSeries in code behind
我花了几天时间尝试将我的数据模型绑定到一个线性系列。我工作正常;但是,我想更改线条颜色。我知道在哪里更改颜色,但图表和系列会忽略我的绑定(是 SolidColorBrush)。如果我在 XAML 中硬编码颜色,它就可以工作;但是,如果我尝试将相同的 属性 绑定到我的视图模型中的颜色 属性,它将不起作用。花了太多时间后我放弃了,原因有两个。
- 根本行不通
- 我意识到我需要绑定 'x'
图表的视图模型数量以显示多个线系列
一次。
我最终只是像这样在后面的代码中定义了我的线系列...
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);
哇,当我阅读我的问题时,我意识到我正在打电话给
DoseChart.Series.Clear();
嗯,这是一个有趣的发现。
我花了几天时间尝试将我的数据模型绑定到一个线性系列。我工作正常;但是,我想更改线条颜色。我知道在哪里更改颜色,但图表和系列会忽略我的绑定(是 SolidColorBrush)。如果我在 XAML 中硬编码颜色,它就可以工作;但是,如果我尝试将相同的 属性 绑定到我的视图模型中的颜色 属性,它将不起作用。花了太多时间后我放弃了,原因有两个。
- 根本行不通
- 我意识到我需要绑定 'x' 图表的视图模型数量以显示多个线系列 一次。
我最终只是像这样在后面的代码中定义了我的线系列...
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);
哇,当我阅读我的问题时,我意识到我正在打电话给
DoseChart.Series.Clear();
嗯,这是一个有趣的发现。