livechart 里面的 所有chart分兩種 一種winform用的 一種wpf用的。
winform用的是把wpf打包做的。
winform也有數據綁定機制,但是功能沒有wpf強
pieChart1.DataBindings.Add(new Binding("Series", datasource, "seriescollection"));
將一個類 datasource 下面的 seriescollection 屬性綁定到 piechart1的 series 屬性上去。
seriescollection就是一個SeriesCollection對象 但這樣明顯無法做到我綁定到一個list表 或則datatable的意願。
所以我把winform 版的piecharts做了個一個繼承 ,因為繼承出來的可以訪問到 里面的核心 WpfBase
1 public class WinFormPieChartEx1 : LiveCharts.WinForms.PieChart 2 { 3 //這個是數據源的包裝類 4 private datasource _datasource_Container_Object; 5 public datasource datasource_Container_Object 6 { 7 get 8 { 9 if (_datasource_Container_Object == null) 10 _datasource_Container_Object = new datasource(); 11 return _datasource_Container_Object; 12 } 13 set 14 { 15 _datasource_Container_Object = value; 16 } 17 } 18 19 public WinFormPieChartEx1():base() 20 { 21 ///數據源下的sourceList 屬性是保存的數據 22 System.Windows.Data.Binding binding = new System.Windows.Data.Binding("sourceList"); 23 //sourceList所在的類 24 binding.Source = datasource_Container_Object; 25 //單向綁定 datasource_Container_Object.sourceList改變 觸發 piechart改變 26 binding.Mode = System.Windows.Data.BindingMode.OneWay; 27 ///轉換器 很重要 實現了 list<double> 到seriesCollection的改變 28 binding.Converter = new DoubleListConvertToSeriesCollection(); 29 ///將以上建立的binding關聯到piechart的Seriecs對象 30 WpfBase.SetBinding(LiveCharts.Wpf.PieChart.SeriesProperty, binding); 31 } 32 } 33 34 //轉換器 35 public class DoubleListConvertToSeriesCollection : System.Windows.Data.IValueConverter 36 { 37 public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 38 { 39 List<double> _value = (List<double>)value; 40 SeriesCollection result = new SeriesCollection(); 41 foreach (double n in _value) 42 { 43 ChartValues<double> chartvalue = new ChartValues<double>(); 44 chartvalue.Add(n); 45 PieSeries series = new PieSeries(); 46 47 series.Values = chartvalue; 48 result.Add(series); 49 } 50 return result; 51 } 52 53 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 54 { 55 return null; 56 } 57 }
