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 SetGroupDisplay(AircraftDataAnalysisModel1.WinRT.DataModel.FlightAnalysisChartGroupViewModel
            groupViewModel, int roundedSecond)
        {
            if (groupViewModel == null || groupViewModel.DataSerie == null
                || groupViewModel.DataSerie.Count <= 0)
                return;

            var findedPoint = groupViewModel.DataSerie.First(
                new Func<SimpleDataPoint, bool>(
                    delegate(SimpleDataPoint pt)
                    {
                        if (pt.Second == roundedSecond)
                            return true;
                        return false;
                    }));

            if (findedPoint == null)
                return;

            if (groupViewModel.Serie1Definition != null)
            {
                groupViewModel.Serie1Definition.SetCurrentDisplayPoint(
                    findedPoint.Second, findedPoint.Value1);
            }
            if (groupViewModel.Serie2Definition != null)
            {
                groupViewModel.Serie2Definition.SetCurrentDisplayPoint(
                    findedPoint.Second, findedPoint.Value2);
            }
            if (groupViewModel.Serie3Definition != null)
            {
                groupViewModel.Serie3Definition.SetCurrentDisplayPoint(
                    findedPoint.Second, findedPoint.Value3);
            }
        }
        private FlightAnalysisChartGroupViewModel SwitchGroup(int i, KeyValuePair<string, IEnumerable<string>> groupItem,
            AircraftDataAnalysisModel1.WinRT.Domain.AircraftAnalysisDataLoader dataLoader)
        {
            FlightAnalysisChartGroupViewModel groupViewModel = null;
            switch (i)
            {
                case 0:
                    {
                        this.Group1 = new FlightAnalysisChartGroupViewModel(this);
                        this.LoadAndAssignValue(this.Group1, groupItem, dataLoader);
                        groupViewModel = this.Group1;
                        break;
                    }
                case 1:
                    {
                        this.Group2 = new FlightAnalysisChartGroupViewModel(this);
                        this.LoadAndAssignValue(this.Group2, groupItem, dataLoader);
                        groupViewModel = this.Group2;
                        break;
                    }
                case 2:
                    {
                        this.Group3 = new FlightAnalysisChartGroupViewModel(this);
                        this.LoadAndAssignValue(this.Group3, groupItem, dataLoader);
                        groupViewModel = this.Group3;
                        break;
                    }
                case 3:
                    {
                        this.Group4 = new FlightAnalysisChartGroupViewModel(this);
                        this.LoadAndAssignValue(this.Group4, groupItem, dataLoader);
                        groupViewModel = this.Group4;
                        break;
                    }
                case 4:
                    {
                        this.Group5 = new FlightAnalysisChartGroupViewModel(this);
                        this.LoadAndAssignValue(this.Group5, groupItem, dataLoader);
                        groupViewModel = this.Group5;
                        break;
                    }
                case 5:
                    {
                        this.Group6 = new FlightAnalysisChartGroupViewModel(this);
                        this.LoadAndAssignValue(this.Group6, groupItem, dataLoader);
                        groupViewModel = this.Group6;
                        break;
                    }
                case 6:
                    {
                        this.Group7 = new FlightAnalysisChartGroupViewModel(this);
                        this.LoadAndAssignValue(this.Group7, groupItem, dataLoader);
                        groupViewModel = this.Group7;
                        break;
                    }
                default: break;
            }

            return groupViewModel;
        }
        private void AssignPointMapperValue(AircraftDataAnalysisModel1.WinRT.Domain.AircraftAnalysisDataLoader dataLoader,
            Dictionary<int, SimpleDataPoint> pointMapper, ref KeyValuePair<string, IEnumerable<string>> group1, ref int counter)
        {
            foreach (var id in group1.Value)
            {
                counter++;

                var rawDatas = dataLoader.GetRawData(id);

                foreach (var raw in rawDatas)
                {
                    if (pointMapper.ContainsKey(raw.Second))
                    {
                        if (counter == 1)
                        {
                            pointMapper[raw.Second].Value1 = raw.Values[0];
                        }
                        else if (counter == 2)
                        {
                            pointMapper[raw.Second].Value2 = raw.Values[0];
                        }
                        else if (counter == 3)
                        {
                            pointMapper[raw.Second].Value3 = raw.Values[0];
                        }
                    }
                }
            }
        }
        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);
            }));
        }