.NET_WPF_使用Livecharts数据绑定图表

news2024/9/20 0:46:14

相关概念

  • LiveCharts 是一个开源的图表库,适用于多种 .NET 平台,包括 WPF、UWP、WinForms 等。
  • LiveCharts 通过数据绑定与 MVVM 模式兼容,使得视图模型可以直接控制图表的显示,无需直接操作 UI 元素。这使得代码更加模块化,易于维护和测试。
  • 在WPF中通过XAML代码实现生成不同的图表。

 WPF中 LiveCharts 不同图表类型

 图表类型

XML示例

折线图(Line Chart)

<lvc:LineChart Series="{Binding SeriesCollection}">

柱状图(Column Chart)

<lvc:ColumnChart Series="{Binding SeriesCollection}">

饼图(Pie Chart)

<lvc:PieChart Series="{Binding SeriesCollection}">

散点图(Scatter Chart)

<lvc:ScatterChart Series="{Binding SeriesCollection}">

雷达图(Radar Chart)

<lvc:RadarChart Series="{Binding SeriesCollection}">

模拟股票监控demo:

步骤:

  1. 安装livecharts。
  2. 定义 ViewModel。
  3. 定义View。
  4. 在view后端进行数据绑定。
  5. 运行文件。
操作图例

步骤1.

步骤3.

步骤5. 

步骤2.

using LiveCharts;
using LiveCharts.Wpf;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;

namespace test.ModelView
{
    // 定义一个名为StockPriceViewModel的公共类,实现INotifyPropertyChanged接口
    public class StockPriceViewModel : INotifyPropertyChanged
    {
        // 声明一个私有变量,用于存储图表系列集合
        private SeriesCollection seriesCollection;
        // 声明一个私有变量,用于存储图表的值集合
        private ChartValues<decimal> priceValues;
        // 声明一个私有变量,用于存储时间格式化函数
        private Func<double, string> dateTimeFormatter;

        // 提供一个公共属性,用于绑定到视图的SeriesCollection
        public SeriesCollection SeriesCollection
        {
            get { return seriesCollection; } // 获取系列集合
            set
            {
                seriesCollection = value; // 设置系列集合
                OnPropertyChanged(nameof(SeriesCollection)); // 通知属性已更改
            }
        }

        // 提供一个公共属性,用于绑定到视图的时间格式化函数
        public Func<double, string> DateTimeFormatter
        {
            get { return dateTimeFormatter; } // 获取时间格式化函数
            set
            {
                dateTimeFormatter = value; // 设置时间格式化函数
                OnPropertyChanged(nameof(DateTimeFormatter)); // 通知属性已更改
            }
        }

        // 构造函数,当创建StockPriceViewModel实例时执行
        public StockPriceViewModel()
        {
            priceValues = new ChartValues<decimal>(); // 初始化价格值集合
            SeriesCollection = new SeriesCollection // 初始化系列集合,并添加一个折线系列
            {
                new LineSeries
                {
                    Values = priceValues // 将价格值集合赋给折线系列的Values属性
                }
            };

            // 设置X轴为时间,并定义格式化显示的函数
            DateTimeFormatter = value => new DateTime((long)value).ToString("HH:mm:ss");

            // 创建一个定时器,用于模拟实时数据更新
            var timer = new Timer(1000); // 设置定时器间隔为1000毫秒(1秒)
            timer.Elapsed += (sender, args) => UpdatePrice(); // 当定时器触发时调用UpdatePrice方法
            timer.Start(); // 启动定时器
        }

        // 更新价格的私有方法,用于模拟新价格的添加
        private void UpdatePrice()
        {
            var newPrice = new Random().Next(100, 200); // 生成一个100到200之间的随机价格
            priceValues.Add(newPrice); // 将新价格添加到价格值集合中
            OnPropertyChanged(nameof(SeriesCollection)); // 通知SeriesCollection属性已更改
        }

        // 声明一个公共事件,用于通知属性更改
        public event PropertyChangedEventHandler PropertyChanged;

        // 受保护的虚方法,用于触发属性更改事件
        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); // 触发事件
        }
    }


}

步骤3.

    <Grid>
        <lvc:CartesianChart Series="{Binding SeriesCollection}">
            <lvc:CartesianChart.AxisX>
                <lvc:Axis Title="时间" LabelFormatter="{Binding DateTimeFormatter}" />
            </lvc:CartesianChart.AxisX>
            <lvc:CartesianChart.AxisY>
                <lvc:Axis Title="价格" />
            </lvc:CartesianChart.AxisY>
        </lvc:CartesianChart>
    </Grid>

步骤4.

            InitializeComponent();
            this.DataContext = new StockPriceViewModel();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE: Thread类以及线程状态

文章目录 Thread类等待一个线程 - join()获取当前线程的引用sleep 线程状态 Thread类 等待一个线程 - join() 操作系统,针对多个线程的执行,是一个"随机调度,抢占式执行“的过程. 线程等待就是在确定两个线程的"结束顺序”. 我们无法确定两个线程调度执行的顺序,但…

物理动力系统的强化学习:一种替代方法

物理动力系统的强化学习&#xff1a;一种替代方法 一、物理和非线性动力学 控制理论通过经典的、鲁棒的和最优的方法&#xff0c;使现代文明成为可能。炼油、电信、现代制造业等都依赖于它们。控制理论建立在物理方程提供的洞察力之上&#xff0c;例如从牛顿定律和麦克斯韦方程…

干货分享 | TSMaster 测试报告生成器操作指南

用户在基于 TSMaster 软件开发测试用例时&#xff0c;或需要使用 TSMaster 生成 HTML 报告时&#xff0c;需要使用 TSMaster 测试报告生成器。 1、Test_Report 说明 Test_Report 是目前 TSMaster 为客户提供的一套测试报告模板&#xff0c;里面集成了测试报告的打印输出、图片…

android13去掉安全模式 删除安全模式

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题排查 3.修改方法 3.1方法1 3.2方法2 4.测试 5.彩蛋 1.前言 Android设备上的安全模式是一种诊断模式,当设备无法正常启动时,它会启动到这个模式。在这个模式下,只有系统自带的程序和服务会被运行,所有的第三方…

谷粒商城实战笔记-139-商城业务-nginx-搭建域名访问环境一(反向代理配置)

文章目录 一&#xff0c;管理员身份修改hosts文件二&#xff0c;配置Nginx反向代理product服务1&#xff0c;Nginx配置文件简介2&#xff0c;配置Nginx将gulimall.com的请求转发到product服务 本节的主要内容是讲述如何实现通过域名 gulimall.com访问谷粒商城系统。 主要实现思…

IDEA右键新建时没有Java Class选项

项目场景&#xff1a; IDEA右键新建时没有Java Class选项 问题描述 IDEA右键新建时没有Java Class选项 原因分析&#xff1a; 提示&#xff1a;这里填写问题的分析&#xff1a; 例如&#xff1a;Handler 发送消息有两种方式&#xff0c;分别是 Handler.obtainMessage()和 Ha…

InstantMesh 论文学习

论文链接&#xff1a;https://arxiv.org/abs/2404.07191 代码链接&#xff1a;https://github.com/TencentARC/InstantMesh 解决了什么问题&#xff1f; 这项技术可以从单个视角的2D图像中生成3D模型&#xff0c;这有助于简化3D内容的创建过程。3D资产的生成可以应用于虚拟现…

Pytorch人体姿态骨架生成图像

ControlNet是一个稳定扩散模型&#xff0c;可以复制构图和人体姿势。ControlNet解决了生成想要的确切姿势困难的问题。 Human Pose使用OpenPose检测关键点&#xff0c;如头部、肩膀、手的位置等。它适用于复制人类姿势&#xff0c;但不适用于其他细节&#xff0c;如服装、发型和…

Altium designer学习笔记03 -原理图绘制

原理图绘制 1. 原理图页大小设置2.原理图格点的设置3. 原理图模板的应用4. 元件的放置5.元件属性的编辑6.元件的选择、移动、旋转、镜像6.1 元件的选择6.2 元件的移动6.3 元件的旋转6.3 元件的镜像 7.元件的复制/剪切/粘贴8.元件的排列与对齐9.绘制导线的导线属性设置10.放置网…

基于Comsol进行薄膜型声学超表面设计与可调节性研究

研究背景&#xff1a; 在隔声领域&#xff0c;高频噪声属于易于隔离的频段噪声&#xff0c;使用隔音板或隔音墙便可达到良好的隔声效果。而低频噪声由于具有波长大、穿透性强、传播距离远等特点&#xff0c;根据质量作用定律&#xff0c;传统的隔声材料需要通过不断增加材料的…

低代码与软件定制开发的完美结合:生产管理软件的高效解决方案

引言 在当今快速变化的商业环境中&#xff0c;企业需要灵活且高效的生产管理软件来应对日益复杂的生产流程和市场需求。传统的软件开发模式往往需要大量的时间和资源&#xff0c;而低代码平台的出现为企业提供了一种快速开发和部署应用的新途径。低代码平台通过直观的拖放界面和…

Mirillis Action v4.40 解锁版下载与免安装教程 (专业高清屏幕录像软件)

前言 Mirillis Action!&#xff08;暗神屏幕录制软件&#xff09;专业高清屏幕录像软件&#xff0c;被誉为游戏视频三大神器之一。这款屏幕录制软件和游戏录制软件&#xff0c;拥有三大硬件加速技术&#xff0c;支持以超高清视频画质录制桌面和实况直播&#xff0c;超清视频画…

如何抢先获得抖音外卖未开放城市的区域服务商资格?附系统搭建教程!

自抖音外卖上线以来&#xff0c;抖音外卖区域服务商的申请热度与日俱增&#xff0c;连带着抖音外卖区域服务商有哪些城市开放了等多个相关话题也成为了各大本地生活服务商交流群的重点讨论对象。 从申请情况来看&#xff0c;目前&#xff0c;抖音外卖区域服务商的申请渠道主要…

五种IO模型、多路转接IO:select,poll,epoll(reactor)(技术

之前的系统部分的基础IO&#xff1a;就是冯诺依曼结果中的访问磁盘&#xff0c;用内存作为输入输出缓冲区提高效率 现在我们要说的高级IO&#xff08;input/output&#xff09;:访问的外设&#xff08;网络中就是网卡&#xff09;&#xff1a;我们的发送和接收接收其实大部分时…

奇奇怪怪的知识又增加了---给数据自动加上千分位

千分位(thousands)&#xff0c;数学领域术语&#xff0c;一种简化数学表达的方式。千分位形式&#xff0c;即从个位数起&#xff0c;每三位之间加一个逗号&#xff0c;例如&#xff0c;将7654321输出成7,654,321。 有粉丝私信问&#xff0c;投稿中经常有编辑要求给数字加上千分…

资产管理系统GLPI的安装配置——Linux(Ubuntu 20.04.6 LTS)

系统版本20.04.6 LTSGLPI版本10.0.16PHP版本7.4.3 1.安装PHP及其依赖。PHP版本必须在7.4.0以上 sudo apt update -y sudo apt upgrade -y sudo apt install -y apache2 php-curl php-zip php-gd php-intl php-intl php-pear php-imagick php-imap php-memcache php-pspell p…

探索腾讯云AI代码助手的效能与实用性

前言开发环境配置项目实例应用一&#xff1a;功能介绍二&#xff1a;项目测试FFmpeg二次开发SDL应用加密播放器 帮助提升建议结语 ​ 前言 腾讯云的AI代码助手是一款强大的编码辅助工具&#xff0c;利用混元代码大模型技术&#xff0c;提供技术对话、代码补全、代码诊断和优化…

MySQL·C/C++访问数据库

目录 准备工作 测试是否安装成功 C/C语言访问 官方文档 接口介绍使用 mysql_init() mysql_close() 补充1&#xff1a;makefile编写 mysql_real_connect() 测试1&#xff1a;编译链接 mysql_query() 测试2&#xff1a;SQL语句测试 改 增 删 查 错误1&#x…

vxe-table树形结构使用setCheckboxRow卡顿--已解决

项目场景&#xff1a; vxe-table树形结构使用setCheckboxRow进行部分节点选中 问题描述 vxe-table树形结构使用setCheckboxRow&#xff0c;在数据较多时卡顿 原因分析&#xff1a; setCheckboxRow内部进行了多次的循环遍历&#xff0c;导致速度慢 解决方案&#xff1a; …

YoloV9改进策略:Block改进|GroupMamba在RepNCSP模块中的革新应用|即插即用

在深度学习和计算机视觉领域&#xff0c;YoloV9以其卓越的性能和高效的检测能力赢得了广泛认可。为了进一步提升YoloV9的性能&#xff0c;我们创新性地引入了GroupMambaLayer作为其RepNCSP模块的核心改进。这一策略不仅显著增强了模型的性能&#xff0c;还优化了参数效率和计算…