private void SetItemsSource(Point point, ISupportAxes2D series)
 {
     try
     {
         var    chartSeries = series as ChartSeries;
         double pointx      = Math.Truncate(ChartArea.PointToValue(series.ActualXAxis, point));
         double pointy      = Math.Truncate(ChartArea.PointToValue(series.ActualYAxis, point));
         if (chartSeries == null || (!(pointx >= 0) || !(pointx < chartSeries.DataCount)))
         {
             return;
         }
         customInfo = new ChartCustomInfo
         {
             LabelX = chartSeries.Label,
             LabelY = ChartArea.SecondaryAxis.Header.ToString()
         };
         var dataSource = chartSeries.ItemsSource as List <StockData>;
         if (dataSource != null)
         {
             customInfo.ValueX = dataSource[(int)pointx].TimeStamp.ToString("MM-dd-yyyy");
         }
         customInfo.ValueY       = pointy.ToString(series.ActualYAxis.LabelFormat, CultureInfo.CurrentCulture);
         customInfo.YValues      = GetYValuesBasedOnIndex(pointx, chartSeries);
         yCount                  = customInfo.YValues.Count;
         customInfo.LabelYValues = GetLabelYValues();
         customInfo.Visibility   = Visibility.Visible;
         PointInfos.Add(customInfo);
         PositionSummaryControl(pointx, chartSeries);
     }
     catch
     {
     }
 }
        private void SetItemsSource(Point point, ISupportAxes series)
        {
            var chartSeries = series as CartesianSeries;
            var pointx      = Math.Truncate(ChartArea.PointToValue(series.ActualXAxis, point));
            var pointy      = Math.Truncate(ChartArea.PointToValue(series.ActualYAxis, point));

            if (chartSeries == null || (!(pointx >= 0) || !(pointx < chartSeries.DataCount)))
            {
                return;
            }
            var dataSource = chartSeries.ItemsSource as List <StockDatas>;

            if (dataSource != null)
            {
                customInfo = new ChartCustomInfo
                {
                    LabelX  = chartSeries.Label,
                    ValueX  = dataSource[(int)pointx].TimeStamp.ToString("MM-dd-yyyy"),
                    ValueY  = pointy.ToString(series.ActualYAxis.LabelFormat, CultureInfo.CurrentCulture),
                    YValues = GetYValuesBasedOnIndex(pointx, chartSeries)
                }
            }
            ;
            if (AnalyticsInfo.VersionInfo.DeviceFamily != "Windows.Mobile")
            {
                customInfo.LabelY = ChartArea.SecondaryAxis.Header.ToString();
            }
            yCount = customInfo.YValues.Count;
            customInfo.LabelYValues = GetLabelYValues();
            customInfo.Visibility   = Visibility.Visible;
            PointInfos.Add(customInfo);
            PositionSummaryControl(point, chartSeries);
        }
 protected override void OnPointerMoved(PointerRoutedEventArgs e)
 {
     base.OnPointerMoved(e);
     SummaryControl.Visibility = Visibility.Visible;
     if (PointInfos != null)
     {
         PointInfos.Clear();
     }
     if (ChartArea != null && IsActivated)
     {
         SetItemsSource(CurrentPoint, ChartArea.Series[0] as ISupportAxes);
         SummaryControl.ItemsSource = PointInfos.Reverse().ToList();
     }
 }
        //protected override void OnModelCreating(DbModelBuilder modelBuilder)
        //{
        //	modelBuilder.Entity<RuleTrend>()
        //		.HasRequired(rt => rt.FuzzyLabelTo)
        //		.WithMany()
        //		.HasForeignKey(rt => rt.FuzzyLabelToId)
        //		.WillCascadeOnDelete(false);

        //	modelBuilder.Entity<RuleTrend>()
        //		.HasRequired(rt => rt.FuzzyLabelFrom)
        //		.WithMany()
        //		.HasForeignKey(rt => rt.FuzzyLabelFromId)
        //		.WillCascadeOnDelete(false);

        //	modelBuilder.Entity<RuleTrend>()
        //		.HasRequired(rt => rt.FuzzyTrend)
        //		.WithMany()
        //		.HasForeignKey(rt => rt.FuzzyTrendId)
        //		.WillCascadeOnDelete(false);

        //	modelBuilder.Entity<StatisticsByFuzzy>()
        //		.HasRequired(rt => rt.EndStateFuzzyLabel)
        //		.WithMany()
        //		.HasForeignKey(rt => rt.EndStateFuzzyLabelId)
        //		.WillCascadeOnDelete(false);

        //	modelBuilder.Entity<StatisticsByFuzzy>()
        //		.HasRequired(rt => rt.EndStateFuzzyTrend)
        //		.WithMany()
        //		.HasForeignKey(rt => rt.EndStateFuzzyTrendId)
        //		.WillCascadeOnDelete(false);

        //	modelBuilder.Entity<StatisticsByFuzzy>()
        //		.HasRequired(rt => rt.StartStateFuzzyLabel)
        //		.WithMany()
        //		.HasForeignKey(rt => rt.StartStateFuzzyLabelId)
        //		.WillCascadeOnDelete(false);

        //	modelBuilder.Entity<StatisticsByFuzzy>()
        //		.HasRequired(rt => rt.StartStateFuzzyTrend)
        //		.WithMany()
        //		.HasForeignKey(rt => rt.StartStateFuzzyTrendId)
        //		.WillCascadeOnDelete(false);

        //          base.OnModelCreating(modelBuilder);
        //}

        /// <summary>
        /// Удаления для диагностического теста и временного ряда
        /// </summary>
        /// <returns></returns>
        public override int SaveChanges()
        {
            var entrieDTs = ChangeTracker.Entries <DiagnosticTest>();

            foreach (var entry in entrieDTs)
            {
                if (entry.State == EntityState.Deleted)
                {
                    var entity = entry.Entity;

                    DiagnosticTestRecords.RemoveRange(DiagnosticTestRecords.Where(rec => rec.DiagnosticTestId == entity.Id));
                    GranuleFuzzys.RemoveRange(GranuleFuzzys.Where(rec => rec.DiagnosticTestId == entity.Id));
                    GranuleEntropys.RemoveRange(GranuleEntropys.Where(rec => rec.DiagnosticTestId == entity.Id));
                    GranuleUXs.RemoveRange(GranuleUXs.Where(rec => rec.DiagnosticTestId == entity.Id));
                    GranuleFTs.RemoveRange(GranuleFTs.Where(rec => rec.DiagnosticTestId == entity.Id));
                    PointInfos.RemoveRange(PointInfos.Where(rec => rec.DiagnosticTestId == entity.Id));
                }
            }
            var entrieSDs = ChangeTracker.Entries <SeriesDescription>();

            foreach (var entry in entrieSDs)
            {
                if (entry.State == EntityState.Deleted)
                {
                    var entity = entry.Entity;

                    var diagnosticsTests = DiagnosticTests.Where(rec => rec.SeriesDiscriptionId == entity.Id).Select(rec => rec.Id).ToList();

                    DiagnosticTestRecords.RemoveRange(DiagnosticTestRecords.Where(rec => diagnosticsTests.Contains(rec.DiagnosticTestId)));
                    Granules.RemoveRange(Granules.Where(rec => diagnosticsTests.Contains(rec.DiagnosticTestId)));
                    GranuleFuzzys.RemoveRange(GranuleFuzzys.Where(rec => diagnosticsTests.Contains(rec.DiagnosticTestId)));
                    GranuleEntropys.RemoveRange(GranuleEntropys.Where(rec => diagnosticsTests.Contains(rec.DiagnosticTestId)));
                    GranuleUXs.RemoveRange(GranuleUXs.Where(rec => diagnosticsTests.Contains(rec.DiagnosticTestId)));
                    GranuleFTs.RemoveRange(GranuleFTs.Where(rec => diagnosticsTests.Contains(rec.DiagnosticTestId)));
                    PointInfos.RemoveRange(PointInfos.Where(rec => diagnosticsTests.Contains(rec.DiagnosticTestId)));
                    DiagnosticTestRecords.RemoveRange(DiagnosticTestRecords.Where(rec => rec.DiagnosticTestId == entity.Id));
                    DiagnosticTests.RemoveRange(DiagnosticTests.Where(rec => rec.SeriesDiscriptionId == entity.Id));
                    StatisticsByEntropys.RemoveRange(StatisticsByEntropys.Where(rec => rec.SeriesDiscriptionId == entity.Id));
                    StatisticsByFuzzys.RemoveRange(StatisticsByFuzzys.Where(rec => rec.SeriesDiscriptionId == entity.Id));
                    AnomalyInfos.RemoveRange(AnomalyInfos.Where(rec => rec.SeriesDiscriptionId == entity.Id));
                    PointTrends.RemoveRange(PointTrends.Where(rec => rec.SeriesDiscriptionId == entity.Id));
                    RuleTrends.RemoveRange(RuleTrends.Where(rec => rec.SeriesDiscriptionId == entity.Id));
                    FuzzyTrends.RemoveRange(FuzzyTrends.Where(rec => rec.SeriesDiscriptionId == entity.Id));
                    FuzzyLabels.RemoveRange(FuzzyLabels.Where(rec => rec.SeriesDiscriptionId == entity.Id));
                }
            }

            return(base.SaveChanges());
        }
 protected override void OnLayoutUpdated()
 {
     if (SummaryControl != null && SummaryControl.Visibility == Visibility.Visible)
     {
         if (PointInfos != null)
         {
             PointInfos.Clear();
         }
         if (ChartArea != null && IsActivated)
         {
             SetItemsSource(CurrentPoint, ChartArea.Series[0] as ISupportAxes);
             SummaryControl.ItemsSource = PointInfos.Reverse().ToList();
         }
     }
     base.OnLayoutUpdated();
 }
 protected override void OnMouseMove(MouseEventArgs e)
 {
     base.OnMouseMove(e);
     try
     {
         SummaryControl.Visibility = Visibility.Visible;
         if (PointInfos != null)
         {
             PointInfos.Clear();
         }
         if (ChartArea == null || !IsActivated)
         {
             return;
         }
         SetItemsSource(CurrentPoint, ChartArea.Series[0] as ISupportAxes2D);
         if (PointInfos != null)
         {
             SummaryControl.ItemsSource = PointInfos.Reverse().ToList();
         }
     }
     catch
     {}
 }