private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.AddedItems.Count != 0) { App selApp = e.AddedItems[0] as App; DamWebAPI.ViewModel.Entity.Graphics graInfo = ViewModel.CreateNewGraphicDS(selApp); DrawGhpics(graInfo); tbExtreamInfo.Text = ViewModel.GetAppsInfo(graInfo) + getExtreamInfo(); //只有显示一支仪器时才显示这条信息 tbcaption.Text = string.Format("{0} {1} {2} {3}", selApp.AppName, selApp.X, selApp.Y, selApp.Z); propertyGrid.SelectedObject = new GraphicProperty(c1Chart, tby1, tby2, tbcaption); } }
private void DrawGhpics(DamWebAPI.ViewModel.Entity.Graphics graInfo) { c1Chart.BeginUpdate(); double dashPixels = ResetChart(); //一次性查询所有的数据 var results = from i in graInfo.Lines where i.IsShow == true group i by i.UnitSymbol; //根据 物理量单位 判断是不是同一类量 List <CalculateValue> allCalcValues = null; tby1.Text = tby2.Text = tbcaption.Text = ""; int lineIndex = 0; //根据多少个Y轴进行循环 for (int i = 0; i < results.Count(); i++) { if (allCalcValues == null) { //避免多个枚举 allCalcValues = ViewModel.GetAllCalcValues(graInfo).ToList(); } //有N个Y轴 Axis yAxis = null; TextBlock tbTitle = null; if (i == 0) { yAxis = c1Chart.View.AxisY; yAxis.Name = "y1"; //set axis title tbTitle = tby1; yAxis.MajorGridStrokeDashes = new DoubleCollection(new double[] { dashPixels, dashPixels }); } else { //创建新的axis yAxis = new Axis { AxisType = AxisType.Y, Position = AxisPosition.Far, Name = "y" + (i + 1).ToString(), }; c1Chart.View.Axes.Add(yAxis); tbTitle = tby2; //hid grid lines yAxis.MajorGridStroke = Brushes.White; yAxis.MinorGridStroke = Brushes.White; } string unitSymbol = results.ElementAt(i).Key; var groupItems = results.ElementAt(i).ToList(); //物理量名称 string calcName = groupItems.First().ParamName; if (groupItems.Count > 1) { //有多个相同单位的物理量 calcName = "单位"; } tbTitle.Text = string.Format("{0} {1}: {2}", tbTitle.Text, calcName, unitSymbol); for (int gi = 0; gi < groupItems.Count; gi++) { var item = groupItems.ElementAt(gi); XYDataSeries ds = new XYDataSeries(); if (gi == 0) { ds.PlotElementLoaded += ds_PlotElementLoaded; } ds.Label = item.LegendName; var valCollection = (from val in allCalcValues where val.ParamId == item.ParamId orderby val.Date select val); ObservableCollection <CalculateValue> collection = new ObservableCollection <CalculateValue>(valCollection); //消除异常值 HandleErrorValue(collection); ds.ItemsSource = collection; ds.XValueBinding = new Binding("Date.DateTime"); ds.ValueBinding = new Binding("Val"); //ds.XValuesSource = (from val in valCollection // select val.Date.DateTime).ToArray(); //ds.ValuesSource = (from val in valCollection // select val.Val).ToArray(); ds.AxisY = yAxis.Name; //set line style lineIndex = setLineStyle(lineIndex, ds); c1Chart.Data.Children.Add(ds); } } c1Chart.EndUpdate(); }