SciChart - 从MVVM中的代码缩放和平移

时间:2016-04-18 11:42:56

标签: mvvm scichart

我的UI中有按钮,必须左右平移X轴,然后放大或缩小。问题是它的MVVM,所以我不能像XAxis.Zoom()这样做,因为视图模型不能直接访问视图。我可以在xaml中定义的所有缩放修改器似乎都直接对控件上的鼠标/触摸事件做出反应。 如何在不违反MVVM约束的情况下从代码中操作轴?

编辑:我还应该补充一点,我使用的是SciChart版本3.3.1,并且当前迭代中没有空间可以更新到可能会破坏API更改的新主要版本。

2 个答案:

答案 0 :(得分:0)

Zoom函数似乎修改了VisibleRange属性,因此解决方案是简单地将轴的VisibleRange绑定到viewmodel属性,然后相应地修改属性。您可能还想将AutoRange设置为从不。

答案 1 :(得分:0)

从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 Examples to provide scrolling

ChartModifier API

如果您希望直接在Axis上调用方法Zoom(),Scroll(),最好的方法是ChartModifier API

使用此API,您可以创建许多对鼠标按钮,键输入做出反应的行为,并且可以直接访问XAxis,YAxis,RenderableSeries,以便您可以缩放和平移。

有一些创建custom modifiers which can zoom and pan here的例子。可以从这些类中以编程方式进行缩放平移,因此我建议将事件或消息路由到ChartModifierBase派生类以操作图表。