Chart for WPF图表控件,有很灵活的数据绑定方式。顾客在使用的过程中,有需求在图表上动态的绑定一些序列,这些序列的数量有可能是变化的。本文就此介绍如何在WPF平台下使用C1Chart的SeriesItemsSource快速绑定图表序列。
首先定义数据存储结构:
定义两个类:MyData和MyReport。MyData类用来存储X、Y轴的数据。MyReport类定义ObservableCollection<MyData>,对应图表的一个序列。
参考代码如下:
public class MyReport { public ObservableCollection Data { get; set; } } public class MyData { public double X { get; set; } public double Y { get; set; } }
声明一个ObservableCollection<MyReport>集合如下:
public ObservableCollection<MyReport> MyReports { get; set; }
XMAL绑定
在XMAL里,用SeriesItemsSource和SeriesItemTemplate绑定到上述的数据源中。
代码如下:
<c1:C1Chart Name="c1Chart1" > <c1:C1Chart.Data> <c1:ChartData SeriesItemsSource="{Binding MyReports}"> <c1:ChartData.SeriesItemTemplate> <DataTemplate> <c1:XYDataSeries ItemsSource="{Binding Data}" ValueBinding="{Binding Y}" XValueBinding="{Binding X}" /> </DataTemplate> </c1:ChartData.SeriesItemTemplate> </c1:ChartData> </c1:C1Chart.Data> <c1:C1ChartLegend DockPanel.Dock="Right" /> </c1:C1Chart>
动态生成系列:
添加一个C1NumericBox,这个控件的Value决定序列的个数,由这个值决定生成多少序列。
C1NumericBox的初始值设为3,代码参考如下:
代码参考如下:
private void InitChart() { int count = 0; if (int.TryParse(this.number1.Value.ToString(), out count)&&count>0) { if (MyReports != null) { MyReports.Clear(); this.DataContext = null; } else { MyReports = new ObservableCollection(); } Random ry = new Random(); ObservableCollection data; MyReport report; //动态生成系列 for (int i = 0; i < count; i++) { data = new ObservableCollection(); report = new MyReport(); for (int j = 0; j < xValues.Count; j++) { data.Add(new MyData() { X = xValues[j], Y = ry.Next(1, 7) }); } report.Data = data; MyReports.Add(report); } this.DataContext = this; } } private void number1_ValueChanged(object sender, C1.WPF.PropertyChangedEventArgs e) { InitChart(); }
运行应用程序,可以得到如下图所示:
在运行时,可以在C1NumericBox里输入值,动态更改序列的个数,比如改成4个,或是2个。
本文的Demo如下:
C1Chart_SeriesItemsSource.zip (1,016.81 kb)