从IRenderableSeriesViewModel将图表渲染到内存中的位图

时间:2016-04-26 07:33:29

标签: scichart

我已经阅读了有关让SciChart在支持论坛上将图表渲染到内存的指南。但是,该示例使用FastLineRenderableSeries,而在我的项目中,我使用IRenderableSeriesViewModel在XAML中使用ObservableCollection<IRenderableSeriesViewModel>进行系列绑定。{/ p>

当我尝试按照SciChart Knowledgebase上的指南操作时,FastLineRenderableSeries使用RenderableSeries作为ObservableCollection<IRenderableSeriesViewModel>,当我尝试分配预先存在的{{1}时,它不起作用} 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将显示以下错误消息:

  

无法隐式转换类型无法隐式转换类型&gt;   System.Collections.ObjectModel.ObservableCollection <SciChart.Charting.Model.ChartSeries.IRenderableSeriesViewModel>到System.Collections.ObjectModel.ObservableCollection <SciChart.Charting.Visuals.RenderableSeries.IRenderableSeries>

您对IRenderableSeriesIRenderableSeriesViewModel

之间的关系有什么建议吗?

1 个答案:

答案 0 :(得分:1)

根据文件:

要在ObservableCollection<IRenderableSeries><!-- 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> 类型var surface = new SciChartSurface() { ChartTitle = "Rendered In Memory", XAxes = xAxes, YAxes = yAxes, RenderableSeries = new RenderableSeriesSourceCollection(seriesViewModels); }; 之间进行映射,您需要使用SciChartSurface.RenderableSeries标记扩展。

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

string str = "{"Id":["1799"],"Type":1,"Date":null,"Group":null,"Ids":1799}";

因此,问题变成了SeriesBinding&#39;,从外观来看这是相当困难的。

最好在XAML中创建或设置SciChartSurface并使用How to apply a MarkupExtension in code behind并将其应用于图表。

编辑:更新

实际上,我可能会为您提供解决方案。 SciChart有类this.FindResource() to get your styleRenderableSeriesConverter。这样的事情可能有用:

dynamic parsedJson = JsonConvert.DeserializeObject<dynamic>(str);
Dynamic newStr = new ExpandoObject();
newStr.Id = parsedJson.Id.ToString();
newStr.Type = parsedJson.Type;
...

白茶!!