1

我已在支持论坛上阅读了有关让 SciChart 将图表渲染到内存的指南。但是,那里的示例使用FastLineRenderableSeries,而在我的项目中,我使用IRenderableSeriesViewModelXAML 中的系列绑定,使用ObservableCollection<IRenderableSeriesViewModel>.

当我尝试遵循SciChart Knowledgebase上的指南时,它使用FastLineRenderableSeriesas RenderableSeries,当我尝试将我的预先存在ObservableCollection<IRenderableSeriesViewModel>RenderableSeries属性分配给SciChartSurface.

我想知道ObservableCollection<IRenderableSeriesViewModel>当我尝试将现有绘图导出到位图内存时是否可以简单地使用我现有的。我可以DataSeries再次从中提取,IRenderableSeriesViewModel但如果有更快的方法来做到这一点,很高兴知道。

谢谢你。

编辑:我正在尝试以这种方式进行导出,如知识库中所示。

我的 ViewModel 目前有这个:

private ObservableCollection<IRenderableSeriesViewModel> seriesViewModels =
    new ObservableCollection<IRenderableSeriesViewModel>();

public ObservableCollection<IRenderableSeriesViewModel> SeriesViewModels
{
    get
    {
        return this.seriesViewModels;
    }
}

正如知识库中所见,

var series = new FastLineRenderableSeries()
{
    SeriesColor = Colors.Red,
    DataSeries = GetDataSeries()
};

var surface = new SciChartSurface()
{
    ChartTitle = "Rendered In Memory",
    XAxes = xAxes,
    YAxes = yAxes,

    // Here, if I try to use "RenderableSeries = seriesViewModels" it doesn't work.
    RenderableSeries = new ObservableCollection() { series }
};

surface.Width = 1000;
surface.Height = 1000;

// Export to bitmap
var bitmapSource = surface.ExportToBitmapSource();

Visual Studio 将显示此错误消息:

无法隐式转换类型 无法将类型 > System.Collections.ObjectModel.ObservableCollection 隐式转换<SciChart.Charting.Model.ChartSeries.IRenderableSeriesViewModel>为 System.Collections.ObjectModel.ObservableCollection<SciChart.Charting.Visuals.RenderableSeries.IRenderableSeries>

IRenderableSeries您对和之间的关系有什么建议IRenderableSeriesViewModel吗?

4

1 回答 1

1

根据文档:

为了在类型ObservableCollection<IRenderableSeriesViewModel>SciChartSurface.RenderableSeriesObservableCollection<IRenderableSeries>之间进行映射,您需要使用SeriesBinding标记扩展。

通常,这在 XAML 中应用如下:

<!-- Declare a SciChartSurface with SeriesBinding -->
<!-- Where xmlns:s="http://schemas.abtsoftware.co.uk/scichart -->
    <s:SciChartSurface RenderableSeries="{s:SeriesBinding RenderableSeriesViewModels}">

    <!-- XAxis, YAxis omitted for brevity -->

</s:SciChartSurface>

所以问题变成了“如何在后面的代码中应用 MarkupExtension ”,这看起来相当困难。

您最好在 XAML 中创建或设置 SciChartSurface 样式并使用this.FindResource() 获取您的样式并将其应用于图表。

编辑:更新

实际上,我可能会为您提供解决方案。SciChart 有RenderableSeriesConverterRenderableSeriesSourceCollection类。像这样的东西可能会起作用:

var surface = new SciChartSurface()
{
    ChartTitle = "Rendered In Memory",
    XAxes = xAxes,
    YAxes = yAxes,

    RenderableSeries = new RenderableSeriesSourceCollection(seriesViewModels);
};

魔术师!!

于 2016-04-27T09:28:12.023 回答