当前位置: 首页 > news >正文

WPF图表库LiveChart异常问题处理-System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围

问题:

在使用liveChart处理一个以时间为X轴的曲线时,遇到一个报错:指定的参数超出了有效值的范围System.ArgumentOutOfRangeException:“Specified argument was out of the range of valid values. Arg_ParamName_Name” 指定的参数超出了有效值的范围

报错位置发生在框架内的代码PageSegmentCollection中,非自己写的代码,无法定位

在这里插入图片描述

代码:

在项目中使用MVVM模式,使用了自定义类型DataModel对折线图的xy轴进行绑定

DataModel:

    public class DataModel{/// <summary>/// 时间,x轴/// </summary>public DateTime Time { get; set; }/// <summary>/// 值,y轴/// </summary>public double Value { get; set; }}

Xaml:

    <lvc:CartesianChartBackground="White"><lvc:CartesianChart.Series><lvc:LineSeriesTitle=""DataLabels="False"PointGeometrySize="0"Values="{Binding SeriesValues}" /></lvc:CartesianChart.Series><lvc:CartesianChart.AxisX><lvc:Axis LabelFormatter="{Binding XFormatter}" /></lvc:CartesianChart.AxisX></lvc:CartesianChart>

Xaml.cs

   public MainWindow(){InitializeComponent();this.DataContext = new MainWindowViewModel();//构造函数实现模型跟图表xy的映射关系var mapper = Mappers.Xy<DataModel>().X(model => (model.Time - default(DateTime)).TotalMinutes) .Y(model => model.Value); Charting.For<DataModel>(mapper);}

ViewModel代码:

 public class MainWindowViewModel : ObservableObject{private ChartValues<DataModel> _seriesValues;public ChartValues<DataModel> SeriesValues{get { return _seriesValues; }set { SetProperty(ref _seriesValues, value); }}public Func<double, string> XFormatter { get; set; }public MainWindowViewModel(){//设置x轴数据转换 - 需要处理值小于0的情况,会导致转换成DateTime失败报错XFormatter = x =>x >= 0 ? default(DateTime).AddMinutes(x).ToString("MM-dd HH:mm") : "00-00 00:00";SeriesValues = new ChartValues<DataModel>();//添加测试数据}}

测试问题

测试1 加入相同值的点

正常运行,没报错

//测试1 加入相同值的点
SeriesValues.Add(new DataModel { Value = 5, Time = DateTime.Parse("2024-1-30 19:00:00") }
);
SeriesValues.Add(new DataModel { Value = 5, Time = DateTime.Parse("2024-1-30 19:00:00") }
);

测试2 加入相同对象

运行报错

//测试2 加入相同对象
var point = new DataModel { Value = 5, Time = DateTime.Parse("2024-1-30 19:00:00") };
SeriesValues.Add(point);
SeriesValues.Add(point);

在这里插入图片描述

原因

在使用模型进行映射绑定的时候,同一个对象加入多次,导致报错。

解决方法:查看添加集合前的处理代码中,是否有可能导致重复加入的情况,进行处理避免。

其他常见的问题:

转换时间坐标的时候,处理小于0的情况

在没数据的时间,livechart会有默认自动的X轴坐标,-0.5,0,0.5,1等等,会有复数,需要处理一下x<0的情况

 XFormatter = x =>x >= 0 ? default(DateTime).AddMinutes(x).ToString("MM-dd HH:mm") : "00-00 00:00";

相关文章:

  • 【GPU驱动开发】- GPU架构流程
  • netlink学习
  • HBase 数据导入导出
  • c语言:贪吃蛇的实现
  • 随着网络的快速发展,网络安全问题也日益凸显,遇到攻击该如何处理,如何抉择合适的防护方案
  • streampark+flink一键整库或多表同步mysql到doris实战
  • echarts条形图添加滚动条
  • Vue.js 中子组件向父组件传值的方法
  • 1、安全开发-Python爬虫EDUSRC目标FOFA资产Web爬虫解析库
  • 编程笔记 html5cssjs 075 Javascript 常量和变量
  • k8s学习-数据管理
  • Jenkins(三):自动化部署SpringBoot项目
  • Kotlin 协程1:深入理解withContext
  • 推荐一款Excel快速加载SQL的插件,方便又好用
  • 14:Servlet中的页面跳转-Java Web
  • 【译】JS基础算法脚本:字符串结尾
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 2019.2.20 c++ 知识梳理
  • emacs初体验
  • HTTP请求重发
  • Javascript Math对象和Date对象常用方法详解
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Laravel 中的一个后期静态绑定
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Vue 动态创建 component
  • WebSocket使用
  • web标准化(下)
  • windows下使用nginx调试简介
  • 当SetTimeout遇到了字符串
  • 码农张的Bug人生 - 见面之礼
  • 面试总结JavaScript篇
  • 前端面试之CSS3新特性
  • 提醒我喝水chrome插件开发指南
  • UI设计初学者应该如何入门?
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • (C)一些题4
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • .NET 读取 JSON格式的数据
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .Net中间语言BeforeFieldInit
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @Autowired 与@Resource的区别
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [1]-基于图搜索的路径规划基础
  • [2021 蓝帽杯] One Pointer PHP
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [Android Studio] 开发Java 程序
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [C#]DataTable常用操作总结【转】
  • [iOS]把16进制(#871f78)颜色转换UIColor