private void LoadSimpleDataPoints(FlightAnalysisChartSerieViewModel vm, string parameterID, Domain.AircraftAnalysisDataLoader dataLoader, int serieNum) { IEnumerable<ParameterRawData> rawdatas = dataLoader.GetRawData(parameterID); if (rawdatas == null) return; Dictionary<int, MyControl.SimpleDataPoint> pointMap = new Dictionary<int, MyControl.SimpleDataPoint>(); foreach (var v in vm) { if (pointMap.ContainsKey(v.Second)) continue; pointMap.Add(v.Second, v); } #region debug test //var serie1 = vm; //serie1.Add(new AircraftDataAnalysisModel1.WinRT.MyControl.SimpleDataPoint() //{ // Label = 1, // Value = 3 //}); //serie1.Add(new AircraftDataAnalysisModel1.WinRT.MyControl.SimpleDataPoint() //{ // Label = 2, // Value = 4 //}); //serie1.Add(new AircraftDataAnalysisModel1.WinRT.MyControl.SimpleDataPoint() //{ // Label = 3, // Value = 2 //}); //serie1.Add(new AircraftDataAnalysisModel1.WinRT.MyControl.SimpleDataPoint() //{ // Label = 4, // Value = 1 //}); //serie1.Add(new AircraftDataAnalysisModel1.WinRT.MyControl.SimpleDataPoint() //{ // Label = 5, // Value = 5 //}); //serie1.Add(new AircraftDataAnalysisModel1.WinRT.MyControl.SimpleDataPoint() //{ // Label = 6, // Value = 3 //}); //return;//debug #endregion foreach (var rd in rawdatas) {//暂时先写死第一秒钟的值 if (pointMap.ContainsKey(rd.Second)) { if (serieNum == 0) pointMap[rd.Second].Value1 = rd.Values[0]; else if (serieNum == 1) pointMap[rd.Second].Value2 = rd.Values[0]; else if (serieNum == 2) pointMap[rd.Second].Value3 = rd.Values[0]; } else { var point = new MyControl.SimpleDataPoint() { Second = rd.Second }; if (serieNum == 0) point.Value1 = rd.Values[0]; else if (serieNum == 1) point.Value2 = rd.Values[0]; else if (serieNum == 2) point.Value3 = rd.Values[0]; pointMap.Add(rd.Second, point); } } var result = from pt in pointMap orderby pt.Key ascending select pt.Value; foreach (var re in result) { if (!vm.Contains(re)) vm.Add(re); } }
private void LoadAndAssignValue(FlightAnalysisChartGroupViewModel groupViewModel, KeyValuePair<string, IEnumerable<string>> groupItem, AircraftDataAnalysisModel1.WinRT.Domain.AircraftAnalysisDataLoader dataLoader) { var vm = new FlightAnalysisChartSerieViewModel(); int j = 0; foreach (var parameterID in groupItem.Value) { this.LoadSimpleDataPoints(vm, parameterID, dataLoader, j); if (j == 0) { groupViewModel.Serie1Definition = new SerieDefinitionViewModel(groupViewModel) { ParameterID = parameterID }; } else if (j == 1) { groupViewModel.Serie2Definition = new SerieDefinitionViewModel(groupViewModel) { ParameterID = parameterID }; } else if (j == 2) { groupViewModel.Serie3Definition = new SerieDefinitionViewModel(groupViewModel) { ParameterID = parameterID }; } j++; } groupViewModel.DataSerie = vm; }
private void AssignSerie(CategoryXAxis Xaxis, NumericYAxis Yaxis, List<Series> series, FlightAnalysisChartSerieViewModel viewModel, int counter, int counterStart, List<string> parameterIDs) { for (int j = counterStart; j < counter; j++) { LineSeries serie = new LineSeries() { ItemsSource = viewModel, XAxis = Xaxis, Thickness = 3, Title = ApplicationContext.Instance.GetFlightParameterCaption(parameterIDs[j]), YAxis = Yaxis, MarkerType = MarkerType.None, Legend = this.TitleLegend, }; if (j == 0) { serie.ValueMemberPath = "Value1"; } else if (j == 1) { serie.ValueMemberPath = "Value2"; } else if (j == 2) { serie.ValueMemberPath = "Value3"; } else { serie.ValueMemberPath = "Value"; } series.Add(serie); } }
private void InitFinalizeRunAsync(AircraftDataAnalysisModel1.WinRT.Domain.AircraftAnalysisDataLoader dataLoader, CategoryXAxis Xaxis1, NumericYAxis Yaxis1, CategoryXAxis Xaxis2, NumericYAxis Yaxis2, FlightAnalysisSubLiteViewModel viewModel, List<Series> series, FlightAnalysisChartSerieViewModel chartviewModel) { this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => { viewModel.ChartViewModel = chartviewModel; this.DataContext = viewModel; viewModel.SelectedParameterIDChanged += viewModel_SelectedParameterIDChanged; // })); //this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, // new Windows.UI.Core.DispatchedHandler(() => //{ this.DataLoader = dataLoader; Xaxis1.DataContext = chartviewModel; Yaxis1.DataContext = chartviewModel; Xaxis2.DataContext = chartviewModel; Yaxis2.DataContext = chartviewModel; foreach (var se in series) { this.tracker1.Series.Add(se); } this.progbar1.IsIndeterminate = false; this.progbar1.Visibility = Windows.UI.Xaml.Visibility.Collapsed; })); }
private void InitializeAsync(SubEditChartNavigationParameter parameter, AircraftDataAnalysisModel1.WinRT.Domain.AircraftAnalysisDataLoader dataLoader) { var Xaxis1 = this.tracker1.Axes["xm1XAxis1"] as CategoryXAxis; var Yaxis1 = this.tracker1.Axes["xm1YAxis1"] as NumericYAxis; var Xaxis2 = this.tracker1.Axes["xm1XAxis2"] as CategoryXAxis; var Yaxis2 = this.tracker1.Axes["xm1YAxis2"] as NumericYAxis; Task.Run(new Action(async () => { var viewModel = new AircraftDataAnalysisWinRT.DataModel.FlightAnalysisSubLiteViewModel(); List<string> parameterIDs = new List<string>(); GetThisParameterID(parameter, parameterIDs); //grouped : var groupedIDs = AircraftDataAnalysisModel1.WinRT.DataModel.FlightAnalysisChartGroupFactory.CalculateBindingGroups(parameterIDs); if (groupedIDs == null) return; var groupCount = groupedIDs.Count(); if (groupCount <= 0) return; //只能两个分组,X轴和Y轴 dataLoader.LoadRawDataAsync(parameterIDs); //第一个分组 List<Series> series = new List<Series>(); Dictionary<int, SimpleDataPoint> pointMapper = new Dictionary<int, SimpleDataPoint>(); for (int i = 0; i < dataLoader.CurrentFlight.EndSecond; i++) { pointMapper.Add(i, new SimpleDataPoint() { Second = i }); } var sorted = from one in pointMapper.Values orderby one.Second ascending select one; FlightAnalysisChartSerieViewModel chartviewModel = new FlightAnalysisChartSerieViewModel(sorted); var group1 = groupedIDs.First(); int counter = 0; int counterStart = 0; viewModel.Group1ID = group1.Key; AssignPointMapperValue(dataLoader, pointMapper, ref group1, ref counter); await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => { AssignSerie(Xaxis1, Yaxis1, series, chartviewModel, counter, counterStart, parameterIDs); })); if (groupCount > 1) { counterStart = counter; var group2 = groupedIDs.ElementAt(1); viewModel.Group2ID = group2.Key; AssignPointMapperValue(dataLoader, pointMapper, ref group2, ref counter); await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => { AssignSerie(Xaxis2, Yaxis2, series, chartviewModel, counter, counterStart, parameterIDs); })); } InitFinalizeRunAsync(dataLoader, Xaxis1, Yaxis1, Xaxis2, Yaxis2, viewModel, series, chartviewModel); })); }
private void InitializeExtremumInfo(ExtremumReportSubEditChartNavigationParameter parameter, AircraftDataAnalysisModel1.WinRT.Domain.AircraftAnalysisDataLoader dataLoader) { var Xaxis1 = this.tracker1.Axes["xm1XAxis1"] as CategoryXAxis; var Yaxis1 = this.tracker1.Axes["xm1YAxis1"] as NumericYAxis; var Xaxis2 = this.tracker1.Axes["xm1XAxis2"] as CategoryXAxis; var Yaxis2 = this.tracker1.Axes["xm1YAxis2"] as NumericYAxis; Task.Run(new Action(async () => { var viewModel = new AircraftDataAnalysisWinRT.DataModel.FlightAnalysisSubLiteViewModel(); List<string> parameterIDs = new List<string>(); GetThisParameterID(parameter, parameterIDs); //grouped : var groupedIDs = AircraftDataAnalysisModel1.WinRT.DataModel.FlightAnalysisChartGroupFactory.CalculateBindingGroups(parameterIDs); if (groupedIDs == null) return; var groupCount = groupedIDs.Count(); if (groupCount <= 0) return; //极值报表只能一个分组,X轴和Y轴,必须两个轴都设置,才能出红蓝线 dataLoader.LoadRawDataAsync(parameterIDs); //第一个分组 List<Series> series = new List<Series>(); Dictionary<int, SimpleDataPoint> pointMapper = new Dictionary<int, SimpleDataPoint>(); for (int i = 0; i < dataLoader.CurrentFlight.EndSecond; i++) { pointMapper.Add(i, new SimpleDataPoint() { Second = i }); } var sorted = from one in pointMapper.Values orderby one.Second ascending select one; FlightAnalysisChartSerieViewModel chartviewModel = new FlightAnalysisChartSerieViewModel(sorted); var group1 = groupedIDs.First(); int counter = 0; int counterStart = 0; viewModel.Group1ID = group1.Key; AssignPointMapperValue(dataLoader, pointMapper, ref group1, ref counter); await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => { AssignSerie(Xaxis1, Yaxis1, series, chartviewModel, counter, counterStart, parameterIDs); })); if (true || groupCount > 1) { counterStart = 0;//counter; var group2 = groupedIDs.First(); //groupedIDs.ElementAt(1); viewModel.Group2ID = group2.Key; AssignPointMapperValue(dataLoader, pointMapper, ref group2, ref counter); counter = 1; await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => { AssignSerie(Xaxis2, Yaxis2, series, chartviewModel, counter, counterStart, parameterIDs); })); } viewModel.ChartViewModel = chartviewModel; this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => { this.TitleLegend.Visibility = Windows.UI.Xaml.Visibility.Collapsed; //必须去掉Legend,因为两条线是可能出两个Legend的 //加参数的Stack也要去掉 this.stackAddParam.Visibility = Windows.UI.Xaml.Visibility.Collapsed; //Yaxis2.Visibility = Windows.UI.Xaml.Visibility.Collapsed; Yaxis2.LabelSettings.Foreground = new SolidColorBrush(Windows.UI.Colors.White); //this.DataContext = viewModel; //viewModel.SelectedParameterIDChanged += viewModel_SelectedParameterIDChanged; })); this.InitFinalizeRunAsync(dataLoader, Xaxis1, Yaxis1, Xaxis2, Yaxis2, viewModel, series, chartviewModel); })); }