致力于图形处理和移动开发。
分类: 系统运维
2012-03-06 10:40:11
visifire是一款基于WPF&silverlight的动画图表控件,支持数据绑定、数据钻取以及实时更新等功能特点。上一篇文章《跟我一起学习做Visifire图表实时更新示例》中实现了visifire图表的实时更新功能,本文主要介绍visifire的数据绑定功能以及如何将图表绑定到数据源。
创建一个silverlight应用程序,并将visifire二进制引用添加到该silverlight程序中。关于在silverlight程序中创建报表,请参考Managed Code Silverlight Sample。
下面是一个Chart XAML:
在项目中创建一个新的Value类,根据如下所示实现INotifyPropertyChanged接口。在类里面添加一个PropertyChanged事件。创建Label和 YValue属性,从而实现ProperyChanged事件。
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ComponentModel;
namespace VisifireDataBinding
{
public class Value : INotifyPropertyChanged
{
public String Label
{
get
{
return _label;
}
set
{
_label = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Label"));
}
}
public Double YValue
{
get
{
return _yValue;
}
set
{
_yValue = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("YValue"));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
Double _yValue;
String _label;
}
}
注:确保System.ComponentModel命名空间已被添加到页面内。
通过后台代码,创建ObservableCollection类,将其设置为图表中DataSeries的数据源。
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
values.Add(new Value() { Label = "Sony", YValue = 50 });
values.Add(new Value() { Label = "Dell", YValue = 35 });
values.Add(new Value() { Label = "HP", YValue = 27 });
values.Add(new Value() { Label = "HCL", YValue = 17 });
values.Add(new Value() { Label = "Toshiba", YValue = 16 });
MyChart.Series[0].DataSource = values;
}
ObservableCollection
}
在上面的例子,值是一个Value 类的集合。使用"Label" and "YValue"将"Label" and "YValue"映射到AxisXLabel和DataPoint 的YValue属性。当DataSeries的DataSource属性被设置到"values",DataSeries从值集合中获取数据来生成相应的 数据点。