这可能是目前最轻量级、最支持MVVM、可定制性最高的开源Chart控件!
由于项目中经常用到Series Chart,而目前市面又实在找不到既支持MVVM,又轻量级的开源Chart控件,于是干脆就花了两周时间随手写了一个。昨天感觉还比较满意,就发布到了Github上:https://github.com/zenjia/MvvmChart
特色:
- 支持MVVM设计模式: 这也是其最大的特色,用户可以自定义SeriesDataTemplate,并支持SeriesDataTemplateSelector(具体信息见Github项目简介)。事实上,当初开发这套控件的初衷就是因为找不到开源的支持MVVM的WPF Chart控件;
- 功能丰富:支持多种常用的Line Series(包括Polyline,StepLine,Spline)和Area Series(包括PolylineArea,StepLineArea,SplineArea),支持显示Item Point。坐标轴支持多重放置模式。支持GridLine,CrossHairs等;
- 高度可定制:Series和Item Point的自定义都可以通过简单的Binding或修改Style来完成。坐标轴的Label文本支持ValueConverter,tick支持用户显示指定的数据。
- 高度可扩展:主要的Series类都继承自基类PathSeries。用户可以通过实现IGeometryBuilder并将其传递给PathSeries的GeometryBuilder属性来创建自己的Series。理论上,用户可以自定义自己想要的任何类型,只要它可以通过Path来绘制,因此这种模式具有高度的可扩展性;
- 轻量级:代码简洁,全部代码不到5k行。功能专注于常用的Cartesian 2D Series Chart,不包含饼状图、柱状图等可以简单通过ItemsControl来绘制的Chart
截图:
Line Series,无Item Point:(从上自下依次为PolylineSeries、StepLineSeries、SplineSeries)

Line Series,带Item Point:

Area Series,不带Item Point:

Area Series,带Item Point:

使用方法:
首先定义数据点:
public class SomePoint
{
public double t { get; }
public double Y { get; }
} public class DemoDataViewModel
{
public List<List<SomePoint>> ItemsSourceList { get; }
}
然后创建DataTemplate:
<DataTemplate x:Key="SeriesTemplate1">
<mvvmCharting:PolyLineSeries IndependentValueProperty="t"
DependentValueProperty="Y"
Stroke="Red"
StrokeThickness="1.5"
ItemsSource="{Binding}">
</mvvmCharting:PolyLineSeries>
</DataTemplate>
最后,创建一个SeriesChart,并引用上面的DateTemplate:
<mvvmCharting:SeriesChart Background="Bisque"
SeriesDataTemplate="{StaticResource SeriesTemplate1}"
SeriesItemsSource="{Binding ItemsSourceList, Source={StaticResource GlobalDemoDataViewModel}}"> <mvvmCharting:SeriesChart.XAxis>
<axis:XAxis />
</mvvmCharting:SeriesChart.XAxis> <mvvmCharting:SeriesChart.YAxis>
<axis:YAxis />
</mvvmCharting:SeriesChart.YAxis> </mvvmCharting:SeriesChart>
(更多使用Sample见项目里的Demo工程)
(对UWP的支持将很快加入)
(欢迎批评指正,欢迎提交bug)
这可能是目前最轻量级、最支持MVVM、可定制性最高的开源Chart控件!的更多相关文章
- Jquery如何序列化form表单数据为JSON对象  C# ADO.NET中设置Like模糊查询的参数  从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值  jquery调用iframe里面的方法  Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件  设计模式之简单工厂模式(C#语言描述)
		jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ... 
- WPF Prism MVVM 中  弹出新窗体. 放入用户控件
		原文:WPF Prism MVVM 中 弹出新窗体. 放入用户控件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_37214567/artic ... 
- 【我们一起写框架】MVVM的WPF框架(三)—数据控件
		这世上,没人能一次性写出完美无缺的框架:因为,任何一个框架都需要项目的淬炼,然后才能升华,趋近完美. 所以,框架是个反复修改的东西,最终形成的东西. 如果你学了一点技术,觉得自己可以写出框架了,觉得自 ... 
- WPF|快速添加新手引导功能(支持MVVM)
		阅读导航 前言 案例一 案例二 案例三(本文介绍的方式) 如何使用? 控件如何开发的? 总结 1. 前言 案例一 站长分享过 眾尋 大佬的一篇 WPF 简易新手引导 一文,新手引导的效果挺不错的,如下 ... 
- Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件
		最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ... 
- 支持Angular 2的表格控件
		前端框架一直这最近几年特别火的一个话题,尤其是Angular 2拥有众多的粉丝.在2016年9月份Angular 2正式发布之后,大量的粉丝的开始投入到了Angular 2的怀抱.当然这其中也包括我. ... 
- 为 ItemsControl 类型的控件提供行号,mvvm模式 绑定集合
		从网络上看到的两种方式,一种是,在 codebehind 里为 控件写事件,下面是将集合绑定到 DataGrid 控件: private void DataGridSoftware_LoadingRo ... 
- 用MVVM模式开发中遇到的零散问题总结(4)——自制摄像头拍摄大头贴控件
		原文:用MVVM模式开发中遇到的零散问题总结(4)--自制摄像头拍摄大头贴控件 一直有个疑问,为什么silverlight对摄像头支持这么好,WPF却一个库都没有....于是我各种苦恼啊,各种Code ... 
- CYQ.Data 支持WPF相关的数据控件绑定(2013-08-09)
		事件的结果 经过多天的思考及忙碌的开发及测试,CYQ.Data 终于在UI上全面支持WPF,至此,CYQ.Data 已经可以方便支持wpf的开发,同时,框架仍保留最低.net framework2.0 ... 
随机推荐
- css3系列之详解border-image
			border-image border-image呢,是给 边框加上背景图片的.没错,就是平常那一小小条的边框,也能加图片. 参数: border-image-source border-image ... 
- 【性能测试】【locust】场景性能测试步骤
			场景设计 实现登陆基本功能,输出相应结果,脚本通 多用户实现随机登陆 添加初始化方法on_start: 每个用户只运行一次 添加检查点: catch_responses = True 脚本设计 # 导 ... 
- Java IDEA 根据mybatis-generator-core自动生成代码支持sqlserver获取备注(二)
			mybatis generator代码生成虽然好用,但是好像不支持sqlserver获取备注信息,这里我主要分享mybatis generator改写后支持sqlserver获取备注信息,mysql以 ... 
- java8的lambda表达式
			关于java8的lambda表达式 lambda表达式一般用于接口,因为lambda表达式是函数式编程. 1.有且仅有一个抽象方法被称为函数式接口,函数式接口可以显示的被@FunctionalInte ... 
- jsp自定义错误页
			1.在可能出错页面的Page标签上errorPage="/Error.jsp"指定错误页 2.Error,jsp的page标签中isErrorPage="true&quo ... 
- 浅谈AsyncLocal,我们应该知道的那些事儿
			前言 最近查看有关框架源码,发现AsyncLocal这玩意水还挺深,于是花了一点功夫去研究,同时对比ThreadLocal说明二者区别以及在何时场景下使用AsyncLocal或ThreadLocal. ... 
- 【不尽如人意的redisTemplete封装】
			线下项目里对spring redisTemplete进行了简单的封装,但是项目里关于其序列化的配置真的有点一言难尽: 可以看到这里用了JdkSerializationRedisSerializer去对 ... 
- Java数据结构(十三)—— 二叉排序树(BST)
			二叉排序树(BST) 需求 给定数列{7,3,10,12,5,1,9},要求能够高效的完成对数据的查询和添加 思路三则 使用数组,缺点:插入和排序速度较慢 链式存储,添加较快,但查找速度慢 使用二叉排 ... 
- 前端vue小知识点
			前端转后端Json数据 this.orderList=JSON.parse(resp.parameter) 
- mysql-installer-web-community和mysql-installer-communityl两个版本的区别
			mysql的官网上提供了两个mysql共享版本的安装,一个20M,一个373.4M.二者的区别是前者是联网安装,当安装时必须能访问互联网,后者是离线安装使用的,一般建议下载离线安装使用的版本. 学Py ... 
