2016-03-19 10 views
1

1) Ich möchte Zoom-Verknüpfungen erstellen - 5 Minuten vorher. 10 Minuten Stunde und 24 Stunden vom Lasttick.Erstellen von Zoom-Verknüpfungen in SciChart WPF

Ich habe diesen Code gemacht und es funktioniert nicht richtig.

was soll ich reparieren?

ZoomOptions = new List<ZoomOption> 
    { 
     new ZoomOption("5M", TimeSpan.FromMinutes(5)), 
     new ZoomOption("30M", TimeSpan.FromMinutes(30)), 
     new ZoomOption("1H", TimeSpan.FromHours(1)), 
     new ZoomOption("1D", TimeSpan.FromHours(24)), 
    }; 

    SelectedZoomOption = ZoomOptions.Last(); 

private void UpdateZoom() 
{ 
    if (_viewModel == null || 
     _viewModel.SelectedZoomOption == null || 
     _viewModel.LastTick == null) return; 

    var timeSpan = _viewModel.SelectedZoomOption.Time; 
    var latestXValue = _viewModel.LastTick.Time; 
    var startDate = latestXValue - timeSpan; 

    var axis = (CategoryDateTimeAxis)Chart.XAxis; 
    if (axis == null || axis.VisibleRange == null) return; 
    var calc = (ICategoryCoordinateCalculator)axis.GetCurrentCoordinateCalculator(); 
    if (calc == null) return; 
    var startIndex = calc.TransformDataToIndex(startDate); 

    var max = ((IndexRange)axis.VisibleRange).Max; 
    var desiredMax = calc.TransformDataToIndex(latestXValue) + 5; 
    if (timeSpan < TimeSpan.FromMinutes(10)) 
    { 
     max = desiredMax; 
    } 
    else if (max == desiredMax) 
    { 
     max += 100; 
    } 
    axis.VisibleRange = new IndexRange(startIndex, max); 
} 

2), warum, wenn ich Graph Geschichte nicht, sondern nur neue Ticks ich kann die Grafik von Anfang sehen, soll aber ein wenig mit der Maus zurückgehen, bevor sie?

3) Was soll ich tun, wenn ich die Graphen im Menü zum Initialisieren und Zurücksetzen ändere?

Antwort

0

In SciChart, wenn Sie den CategoryDateTimeAxis verwenden, eine Bar (ein Daten-Punkt) = x Minuten (Ihre Daten unter der Annahme gleich Abstand pro bar).

Wenn Sie zum Beispiel 15 Minuten (900 Sekunden) Balken auf dem Diagramm haben, dann 10 Balken = 150 Minuten (9000 Sekunden). Daher müssen Sie XAxis.VisibleRange wie folgt festlegen:

public void SetRangeToTimeFrame(TimeSpan timeFrame) 
{ 
    // Assuming you have a reference to the data series of type OhlcDataSeries 
    int indexMax = dataSeries.XValues.Count - 1; 

    // Assuming you know timeframe (one bar = X seconds) 
    // If you don;t know this, SciChart tries to calculate it in the 
    // CategoryDateTimeAxis.BarTimeFrame property 
    const int timeframe = 900; // for example 900 seconds per bar 

    // Calculate the min index to display. Do not go below zero 
    int indexMin = Math.Max(indexMax - (timeFrame.TotalSeconds/timeFrame), 0); 

    // Set XAxis.VisibleRange equal to the new range 
    // OR, Set via binding if you have a property XVisibleRange in ViewModel 
    XAxis.VisibleRange = new IndexRange(indexMin, indexMax); 
} 

Das ist es wirklich!

Wenn Sie Balken mit variabler Länge haben (z. B. ein Balken ist 10 Minuten, einer ist 20 Sekunden), wird Ihre Berechnung fast unmöglich ... aber es ist immer noch möglich. Lassen Sie mich wissen, wenn dies der Fall ist, werde ich die Antwort verbessern.

(2) und (3) sind wirklich verschiedene Fragen und brauchen mehr Klärung, bevor sie beantwortet werden können.

Disclaimer: Ich bin der technische Projektleiter des SciChart WPF-Projekt