SciChart — масштабирование и панорамирование кода в MVVM

У меня есть кнопки в моем пользовательском интерфейсе, которые должны перемещать ось X влево и вправо, а также увеличивать или уменьшать масштаб. Проблема в том, что это MVVM, поэтому я не могу просто сделать что-то вроде XAxis.Zoom(), потому что модель представления не может напрямую обращаться к представлению. И все модификаторы масштабирования, которые я могу определить в xaml, похоже, связаны с реакцией на события мыши/касания непосредственно на элементе управления. Как мне управлять осью из кода, не нарушая ограничений MVVM?

РЕДАКТИРОВАТЬ: я также должен добавить, что я использую SciChart версии 3.3.1, и в текущей итерации нет места для обновления до новой основной версии с потенциально опасными изменениями API.


person Shaggydog    schedule 18.04.2016    source источник


Ответы (2)


Самый простой способ управлять масштабированием области просмотра из ViewModel — это привязаться к VisibleRange, например.

Просмотреть

<s:SciChartSurface>
   <!-- RenderableSeries omitted -->

   <s:SciChartSurface.XAxis>
       <s:NumericAxis VisibleRange="{Binding XVisibleRange}"/>
   </s:SciChartSurface.XAxis>

   <s:SciChartSurface.YAxis>
       <s:NumericAxis VisibleRange="{Binding YVisibleRange}"/>
   </s:SciChartSurface.YAxis>
</s:SciChartSurface>

Модель представления

// Viewmodel, I assume you will implement INotifyPropertyChanged 

public DoubleRange XVisibleRange { get;set; }
public DoubleRange YVisibleRange { get;set; }

Этот метод используется в ряде Примеры SciChart для прокрутки.

API ChartModifier

Если вы хотите вызывать методы Zoom(), Scroll() непосредственно на оси, лучше всего это сделать в API ChartModifier.

Используя этот API, вы можете создать ряд поведений, которые реагируют на кнопки мыши, ввод с клавиатуры и могут иметь прямой доступ к XAxis, YAxis, RenderableSeries, чтобы вы могли масштабировать и панорамировать.

Есть примеры создания пользовательские модификаторы, которые могут масштабировать и панорамировать здесь. Масштабирование Панорамирование возможно программно из этих классов, поэтому я бы предложил направлять ваши события или сообщения в производный класс ChartModifierBase для управления диаграммой.

person Dr. Andrew Burnett-Thompson    schedule 18.04.2016

Функции масштабирования, по-видимому, изменяют свойство VisibleRange, поэтому решение состояло в том, чтобы просто привязать VisibleRange оси к свойству модели представления, а затем соответствующим образом изменить свойство. Вы также можете установить AutoRange на Never.

person Shaggydog    schedule 18.04.2016