如何删除或隐藏 OxyPlot 图上的注释?

How to remove or hide comments on an OxyPlot graph?

如何删除或隐藏对 OxyPlot 图的评论?我正在这样做,但它不起作用:

public void AddAnnotation(IEnumerable<Annotation> annotations)
{
  foreach (var annotation in annotations)
  {
    MyOxyPlotModel.Annotations.Add(annotation);
  }

  RefreshAxisSeriesPlot();
}

public void RemoveAnnotation(IEnumerable<Annotation> annotations)
{
  foreach (var annotation in annotations)
  {
    MyOxyPlotModel.Annotations.Remove(annotation);
  }

  RefreshAxisSeriesPlot();
}

private void RefreshAxisSeriesPlot() => MyOxyPlotModel.InvalidatePlot(true);

使用此代码,添加注释有效,但删除注释无效。

编辑:

好的,我在我的代码中发现了问题。 事实上,我还没有完成对我的 LINQ 查询的评估,我从中得到了我的 IEnumerable<Annotation> annotations… 并且它在 IEnumerable<Annotation> annotations.

的每次迭代中重新创建了一个新的 Annotation 对象

与您之前添加到 MyOxyPlotModel.Annotations 的实例相比,您可能将 Annotation 的不同实例传递给您的 RemoveAnnotation 方法。将 Annotations 中不存在的实例传递给 Annotations.Remove 不会删除任何内容,因为无法确定要删除的注释。

确保在 AddAnnotationRemoveAnnotation 方法中使用相同的实例,或者使用注释的 属性 将其与现有注释进行比较。

例如,如果您使用派生自 TextualAnnotation 的注释,则可以通过 Text 属性 来比较它们。像这样:

public void RemoveAnnotation(IEnumerable<Annotation> annotations)
{
    foreach (var annotation in annotations)
    {
        if (MyOxyPlotModel.Annotations.Contains(annotation))
            MyOxyPlotModel.Annotations.Remove(annotation);
        else if (annotation is TextualAnnotation ta)
        {
            var existingTa = MyOxyPlotModel.Annotations.OfType<TextualAnnotation>().FirstOrDefault(x => x.Text == ta.Text);
            if (existingTa != null)
                MyOxyPlotModel.Annotations.Remove(existingTa);
        }
    }

    RefreshAxisSeriesPlot();
}