2016-03-19 2 views
1

1) Я хочу создать ярлыки масштабирования - за 5 минут до этого. 10 минут час и 24 часа от последнего.Создание ярлыков масштабирования в SciChart WPF

Я сделал этот код, и он не работает правильно.

что я должен исправить?

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) почему, когда я не имею историю графа, но только новые галочки я не могу видеть график с начала, но должен вернуться немного с помощью мыши раньше?

3) что мне делать при смене графиков в меню для инициализации и сброса?

ответ

0

В SciChart, когда вы используете CategoryDateTimeAxis, одна полоса (одна точка данных) = x Минуты (при условии, что ваши данные равны расстоянию на бар).

Например, если у вас есть 15-минутные (900 секунд) бары на диаграмме, то 10 баров = 150 минут (9000 секунд). Поэтому все, что вам нужно сделать, это установить XAxis.VisibleRange следующим образом:

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

Это действительно так!

Если у вас есть бары переменной длины (например, одна полоса составляет 10 минут, одна - 20 секунд), то ваши вычисления становятся практически невозможными ... но это все еще возможно. Дайте мне знать, если это так, я улучшу ответ.

(2) и (3) - это действительно разные вопросы и требуется больше разъяснений, прежде чем они смогут ответить.

Отказ от ответственности: Я тек ведущий в SciChart WPF Project

 Смежные вопросы

  • Нет связанных вопросов^_^