Visifire在visifire_v3.6.8之前授权都是GPL v3的,而且也算是比较强大的chart插件。
之前有写过WPF绑定.NET对象属性简单实例
这里实战,因为项目用到,顺便这里做个笔记。
Visifire数据绑定的方式:<Window x:Class="DataBindingInWPFVisifireChart.MainWindow"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="400" Width="580"
xmlns:vc="clr-namespace:Visifire.Charts;assembly=WPFVisifire.Charts"
>
<Grid>
<StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center" >
<vc:Chart Name="MyChart" Width="500" Height="300" Padding="10,10" Margin="10,0" AnimatedUpdate="True" Theme="Theme5">
<vc:Chart.Titles>
<vc:Title Text="Visifire DataBinding"></vc:Title>
</vc:Chart.Titles>
<vc:Chart.Series>
<vc:DataSeries RenderAs="StackedArea" >
<vc:DataSeries.DataMappings>
<vc:DataMapping MemberName="AxisXLabel" Path="Label"></vc:DataMapping>
<vc:DataMapping MemberName="YValue" Path="YValue"></vc:DataMapping>
</vc:DataSeries.DataMappings>
</vc:DataSeries>
</vc:Chart.Series>
</vc:Chart>
<Button Margin="10" Click="Button_Click" Width="80">add</Button>
<Button Margin="10" Click="Button1_Click" Width="80">remove</Button>
</StackPanel>
</Grid>
</Window>
要绑定的对象设计:
namespace DataBindingInWPFVisifireChart { public class ValuesCollection : ObservableCollection<Value> { }; public class Value : INotifyPropertyChanged { #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; #endregion Double _yValue; String _label; 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")); } } } }
实现 INotifyPropertyChanged 接口和为绑定类型的每个属性提供更改事件,ok
测试:
public MainWindow() { 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> values = new ObservableCollection<Value>(); private void Button_Click(object sender, RoutedEventArgs e) { values.Add(new Value() { Label = "add", YValue = 33.3 }); } private void Button1_Click(object sender, RoutedEventArgs e) { if (values.Count > 0) { values.RemoveAt(values.Count - 1); } }