一个简单的使用例子,展示了如何使用 ObservableCollection<IRenderableSeriesViewModel>
来创建和显示一些基本的图表数据。
定义 XAML
添加一个 SciChart
图表控件。Y 轴通过设置 AxisAlignment
属性为 Left
被放置在图表的左侧。
<Window x:Class="YourNamespace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="http://schemas.abtsoftware.co.uk/scichart">
<Grid>
<s:SciChartSurface x:Name="sciChart">
<s:SciChartSurface.RenderableSeries>
<s:FastLineRenderableSeries x:Name="lineSeries"/>
</s:SciChartSurface.RenderableSeries>
<!-- 配置 Y 轴 -->
<SciChart:SciChartSurface.YAxis>
<SciChart:NumericAxis AxisAlignment="Left" <!-- 设置 Y 轴在左侧 -->
GrowBy="0.1, 0.1"/> <!-- 可选:设置轴的缩放范围 -->
</SciChart:SciChartSurface.YAxis>
</s:SciChartSurface>
</Grid>
</Window>
设置 ViewModel
在 ViewModel
中,创建一个 ObservableCollection<IRenderableSeriesViewModel>
并初始化它。
public class MyViewModel
{
public ObservableCollection<IRenderableSeriesViewModel> RenderableSeries { get; set; }
public MyViewModel()
{
RenderableSeries = new ObservableCollection<IRenderableSeriesViewModel>();
// 创建一个数据系列
var lineDataSeries = new XyDataSeries<double, double>();
for (int i = 0; i < 100; i++)
{
lineDataSeries.Append(i, Math.Sin(i * 0.1));
}
// 创建一个可渲染的系列,并将数据系列赋值给它
var lineRenderableSeries = new FastLineRenderableSeriesViewModel
{
DataSeries = lineDataSeries,
StrokeThickness = 2,
Stroke = Colors.SteelBlue
};
// 添加到集合
RenderableSeries.Add(lineRenderableSeries);
}
}
在代码中绑定 ViewModel
public MainWindow()
{
InitializeComponent();
// 创建 ViewModel 实例
var viewModel = new MyViewModel();
// 设置 DataContext
this.DataContext = viewModel;
// 绑定 RenderableSeries
sciChart.RenderableSeries = viewModel.RenderableSeries;
}
在这个例子中,首先在 XAML 中定义了一个 SciChartSurface 控件,并在其中添加了一个名为 lineSeries
的 FastLineRenderableSeries
。然后,在 ViewModel 中,我们创建了一个 ObservableCollection<IRenderableSeriesViewModel>
,并向其中添加了一个 FastLineRenderableSeriesViewModel
实例。这个实例包含了一个简单的正弦波数据系列。最后,在窗口的后台代码中,我们创建 ViewModel 的实例,并将其设置为窗口的 DataContext
。同时,我们将 sciChart
的 RenderableSeries
属性绑定到 ViewModel 中的 RenderableSeries
集合。
这样一来,当 RenderableSeries
集合发生变化时,SciChart 控件会自动更新,显示相应的图表。这种方式非常适合于动态图表,其中数据可能会实时变化。
数据结构处理
在 C#
中遍历 XyDataSeries
对象(通常用于 SciChart
或其他图表库中)可以通过访问其数据点来实现。XyDataSeries
对象通常包含一系列的 X 和 Y 值对,可以通过索引或迭代器来遍历这些值。
var xyDataSeries = new XyDataSeries<double, double>();
// 已经添加了一些数据
xyDataSeries.Append(1, 2);
xyDataSeries.Append(2, 3);
xyDataSeries.Append(3, 4);
// 然后,可以使用 for 循环或 foreach 循环来遍历数据系列:
for (int i = 0; i < xyDataSeries.Count; i++)
{
double xValue = xyDataSeries.XValues[i];
double yValue = xyDataSeries.YValues[i];
// 对 xValue 和 yValue 进行操作
}
同时,我们也可以将 XyDataSeries<double, double>
类型转换为 (double x, double y)[]
类型的数组,使用 LINQ
的 Select
和 ToArray
方法。这种方法可以将 X
和 Y
值的序列合并为一个元组序列,并将其转换为数组。
using System.Linq;
// 假设已经有一个 XyDataSeries 实例
var xyDataSeries = new XyDataSeries<double, double>();
// ... 添加数据到 xyDataSeries
// 转换 XyDataSeries 为 (double x, double y)[] 类型
(double x, double y)[] pointDataset = xyDataSeries.XValues
.Zip(xyDataSeries.YValues, (x, y) => (x, y))
.ToArray();
这种方法简洁高效,适用于将 XyDataSeries
中的数据点转换为元组数组,方便进行后续操作或处理。