3

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

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

4

2 回答 2

0

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

于 2016-04-18T13:42:41.883 回答
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 示例中使用以提供滚动

图表修改器 API

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

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

这里有创建自定义修饰符的示例,可以缩放和平移。在这些类中以编程方式缩放平移是可能的,因此我建议将您的事件或消息路由到 ChartModifierBase 派生类以操作图表。

于 2016-04-18T13:44:13.287 回答