这多是目前最轻量级、最支持MVVM、可定制性最好的开源WPF Chart控件!

因为项目中常常用到Series Chart,而目前市面又实在找不到既支持MVVM,又轻量级的开源Chart控件,因而干脆就花了两周时间随手写了一个。昨天感受还比较满意,就发布到了Github上:https://github.com/zenjia/MvvmChartgit

特点:

  • 支持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)github

 

Line Series,带Item Point:设计模式

 

Area Series,不带Item Point:mvvm

Area Series,带Item Point:ui

使用方法:

首先定义数据点:spa

    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:code

   <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工程)blog

(对UWP的支持将很快加入)继承

(欢迎批评指正,欢迎提交bug)

相关文章
相关标签/搜索