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);
            }));
        }