Quiet
  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我

bajiu

  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我
Quiet主题
  • C#

使用IRenderableSeriesViewModel展示图表数据

bajiu
.Net客户端

2024-01-15 16:31:00

一个简单的使用例子,展示了如何使用 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 中的数据点转换为元组数组,方便进行后续操作或处理。

上一篇

node上传文件乱码

下一篇

c#设计模式之IEventAggregator

©2024 By bajiu.