SciChart - 从 MVVM 中的代码缩放和平移
SciChart - zooming and panning from code in MVVM
我的 UI 中有一些按钮,它们必须左右平移 X 轴,以及放大或缩小。问题是它是 MVVM,所以我不能只做 XAxis.Zoom() 这样的事情,因为视图模型不能直接访问视图。我可以在 xaml 中定义的所有缩放修饰符似乎都可以直接在控件上处理对 mouse/touch 事件的反应。
如何在不违反 MVVM 约束的情况下从代码操纵轴?
编辑:我还应该补充一点,我使用的是 SciChart 版本 3.3.1,并且在当前迭代中没有 space 更新到可能会破坏 API 更改的新主要版本。
缩放功能似乎修改了 VisibleRange 属性,因此解决方案是简单地将轴的 VisibleRange 绑定到视图模型 属性,然后相应地修改 属性 .您可能还想将 AutoRange 设置为 Never。
从 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
// Viewmodel, I assume you will implement INotifyPropertyChanged
public DoubleRange XVisibleRange { get;set; }
public DoubleRange YVisibleRange { get;set; }
此技术用于 SciChart Examples to provide scrolling。
ChartModifier API
如果您希望直接在轴上调用 Zoom()、Scroll() 方法,最好的方法是在 ChartModifier API 中。
使用此 API 您可以创建许多对鼠标按钮、键输入做出反应的行为,并且可以直接访问 XAxis、YAxis、RenderableSeries,以便您可以缩放和平移。
有创建实例custom modifiers which can zoom and pan here。可以在这些 classes 中以编程方式缩放平移,因此我建议将您的事件或消息路由到派生的 class 的 ChartModifierBase 以操纵图表。
我的 UI 中有一些按钮,它们必须左右平移 X 轴,以及放大或缩小。问题是它是 MVVM,所以我不能只做 XAxis.Zoom() 这样的事情,因为视图模型不能直接访问视图。我可以在 xaml 中定义的所有缩放修饰符似乎都可以直接在控件上处理对 mouse/touch 事件的反应。 如何在不违反 MVVM 约束的情况下从代码操纵轴?
编辑:我还应该补充一点,我使用的是 SciChart 版本 3.3.1,并且在当前迭代中没有 space 更新到可能会破坏 API 更改的新主要版本。
缩放功能似乎修改了 VisibleRange 属性,因此解决方案是简单地将轴的 VisibleRange 绑定到视图模型 属性,然后相应地修改 属性 .您可能还想将 AutoRange 设置为 Never。
从 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
// Viewmodel, I assume you will implement INotifyPropertyChanged
public DoubleRange XVisibleRange { get;set; }
public DoubleRange YVisibleRange { get;set; }
此技术用于 SciChart Examples to provide scrolling。
ChartModifier API
如果您希望直接在轴上调用 Zoom()、Scroll() 方法,最好的方法是在 ChartModifier API 中。
使用此 API 您可以创建许多对鼠标按钮、键输入做出反应的行为,并且可以直接访问 XAxis、YAxis、RenderableSeries,以便您可以缩放和平移。
有创建实例custom modifiers which can zoom and pan here。可以在这些 classes 中以编程方式缩放平移,因此我建议将您的事件或消息路由到派生的 class 的 ChartModifierBase 以操纵图表。