2016-04-26 7 views
1

Ich habe die Anleitung zum Abrufen von SciChart zum Rendern von Diagramm in den Support-Foren gelesen. Allerdings verwendet das Beispiel dort FastLineRenderableSeries, während in meinem Projekt verwende ich IRenderableSeriesViewModel mit Serienbindung in XAML mit ObservableCollection<IRenderableSeriesViewModel>.Rendern von Diagramm zu Bitmap im Speicher von IRenderableSeriesViewModel

Wenn ich versuche, die Führung bei SciChart Knowledgebase zu folgen, verwendet es FastLineRenderableSeries als RenderableSeries, und es funktioniert nicht, wenn ich versuche, meine vorbestehenden ObservableCollection<IRenderableSeriesViewModel>-RenderableSeries Eigenschaft unter SciChartSurface zuzuweisen.

Ich würde gerne wissen, ob ich einfach meine vorhandene ObservableCollection<IRenderableSeriesViewModel> verwenden könnte, wenn ich versuche, meine vorhandenen Plots in Bitmap-Speicher zu exportieren. Ich könnte einfach die DataSeries wieder aus der IRenderableSeriesViewModel extrahieren, aber wenn es eine schnellere Möglichkeit gibt, dies zu tun, wäre es toll zu wissen.

Vielen Dank.

EDIT: Ich versuche, den Export auf diese Weise zu tun, wie in der Knowledgebase gesehen.

Mein Ansichtsmodell hat derzeit den:

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

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

Und wie in dem Wissen gesehen,

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(); 

von Visual Studio wird diese Fehlermeldung angezeigt:

nicht implizit Typen umwandeln kann, kann nicht Implizit Typ konvertieren> System.Collections.ObjectModel.ObservableCollection <SciChart.Charting.Model.ChartSeries.IRenderableSeriesViewModel> zu System.Collections.ObjectModel.ObservableCollection <SciChart.Charting.Visuals.RenderableSeries.IRenderableSeries>

Müssen Sie Vorschläge in Bezug auf die Beziehung zwischen IRenderableSeries und IRenderableSeriesViewModel?

+0

Hallo Kurtis, verwenden Sie SciChartSurface.ExportToBitmapSource()? Funktioniert das mit der Bindung an ObservableCollection ? Möchten Sie ein Codebeispiel freigeben? Bitte bearbeiten Sie Ihre Frage + Kommentar hier, um mich zu benachrichtigen –

+0

Vielen Dank Dr. ABT. Ich habe meine Frage mit dem Code aktualisiert, mit dem ich arbeiten möchte. –

Antwort

1

Nach der Dokumentation:

Um zwischen ObservableCollection<IRenderableSeriesViewModel> und SciChartSurface.RenderableSeries zur Karte, die vom Typ ist ObservableCollection<IRenderableSeries> Sie die SeriesBinding Markup-Erweiterung verwenden müssen.

Typischerweise wird dies in XAML wie folgt angewandt:

<!-- 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> 

So wird das Problem 'How to apply a MarkupExtension in code behind', die durch den Blick von ihm ziemlich schwierig ist.

Sie könnten besser SciChartSurface in XAML erstellen und stylen und this.FindResource() to get your style verwenden und es auf das Diagramm anwenden.

EDIT: UPDATE

Eigentlich kann ich eine Lösung für Sie. SciChart hat die Klassen RenderableSeriesConverter und RenderableSeriesSourceCollection. So etwas könnte funktionieren:

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

    RenderableSeries = new RenderableSeriesSourceCollection(seriesViewModels); 
}; 

Magique !!

+0

Bekam es. Ich denke, ich werde den Ansatz wählen, bei dem ich die DataSeries aus meinem IRenderableSeriesViewModel extrahiere und die neuen IRenderableSeries rekonstruiere. –

+1

Eigentlich könnte ich eine Lösung für Sie haben. Siehe meine aktualisierte Antwort –

+1

Danke. Ihre aktualisierte Antwort funktioniert perfekt mit meiner bestehenden Sammlung. –