【问题标题】:How to synchronize 2 Oxyplot graphs?如何同步 2 个 Oxyplot 图?
【发布时间】:2018-02-24 11:39:54
【问题描述】:

我有一个 WPF 应用程序,用于显示我使用 Oxyplot 创建的 2 个图表。这两个图都是独立的——它们有自己的视图和视图模型,并从不同的来源接收数据。

    UserControl
    |
    |--- ContentControl
    |     |
    |     |--- ViewA (Contains 1 graph) --- ViewModelA --- SourceA
    |
    |
    |--- ContentControl
          |
          |--- ViewB (Contains another graph) --- ViewModelB --- SourceB

当 ViewModelA 从 SourceA 接收数据时,我将数据添加到 Series,然后调用 Model.InvalidatePlot(true)。 ViewModelB 和 SourceB 也是如此。

两个图表的数据之间唯一的共同点是时间。 SourceA 和 SourceB 发送的数据间隔可能只有几毫秒到几秒。

所以这就是我需要实现的 - 我如何确保两个图表的 DateTimeAxis 始终同步?在任何给定时间点,我都需要在两个图表的 X 轴上显示相同的最小值和相同的最大值。

我遇到了 AxisChanged 事件,我可以在其中使用 1 个图表中的事件并在另一个图表上设置相同的值。但就我而言,我不确定如何使用它,因为我的图表位于不同的类中。另外,我所描述的案例是一个非常简单的案例。在应用程序的生命周期中,我最终可能会得到多达 9 个图表,并且图表的创建顺序可能会有所不同。所以我不认为我可以将一个图表视为主要图表并让所有其他图表都遵循这个图表。

对此的任何想法将不胜感激!

【问题讨论】:

  • 您需要一个父视图模型来保存您的 MinimumMaximum 值,以便您的图表同步,然后子视图模型(ViewModelA、ViewModelB)包含每个图表的特定数据.

标签: wpf prism oxyplot


【解决方案1】:

最近我遇到了类似的问题。我在一个绘图中有多个平行轴,并且在用户缩放或平移它们时需要它们同步。 Oxyplot 团队尚未实现此功能(请参阅:https://github.com/oxyplot/oxyplot/issues/86https://github.com/oxyplot/oxyplot/issues/59)。但是有一个相当简单的解决方法: 您需要将一个轴视为主轴,并更新另一个轴,例如:

AxisT.AxisChanged += AxisT_AxisChanged;

private void AxisT_AxisChanged(object sender, AxisChangedEventArgs e)
{
  switch (e.ChangeType) {
    case AxisChangeTypes.Reset:
      AxisD.Reset();
      break;
    case AxisChangeTypes.Zoom:
    case AxisChangeTypes.Pan:
      AxisD.AbsoluteMinimum = AxisT.ActualMinimum;
      AxisD.AbsoluteMaximum = AxisT.ActualMaximum;
      AxisD.Minimum = AxisT.ActualMinimum;
      AxisD.Maximum = AxisT.ActualMaximum;
      break;
  }
}

在这种方法中,同一图中的轴或不同的轴没有区别。如果轴上有不同的比例,则应用比例比例,如 AxisD.AbsoluteMinimum = AxisT.ActualMinimum * ratio;

AxisChangedEventArgs 包含 DeltaMinimum 和 DeltaMaximum 值,但我没有找到将它们轻松应用到其他轴的方法,因此使用 ActualMinimum 和 ActualMaximum 值更简单。

实际上,您可以为另一个轴设置相同的处理程序,只要确保两次设置相同值时更新循环停止即可。

@jsanalytics 的评论允许您以 MVVM 方式美化此解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    相关资源
    最近更新 更多