/ / OxyPlot ne rafraîchit pas dans VB.net - wpf, vb.net, xaml, graphique, oxyplot

OxyPlot ne rafraîchit pas dans VB.net - wpf, vb.net, xaml, graphique, oxyplot

J'utilisais Visual Studio pour cartographier les données lorsque jerencontré un problème avec l’axe X logarithmique. Je me suis maintenant tourné vers OxyPlot, cependant, je rencontre de gros problèmes pour que mes données soient peuplées. Je suis passé des formulaires Windows à WPF. Il pourrait donc s'agir d'un problème de XAML avec liaison (incertain). J'ai essentiellement pris leur exemple très limité sur VB.net et je peux facilement le reproduire. Ce qui me pose problème, c'est de reproduire le traçage dynamique avec OxyPlot. Voici mon code jusqu'à présent:

Échantillon: (http://docs.oxyplot.org/en/latest/getting-started/hello-wpf-vb.html)

Public Sub New()
Model = New PlotModel()

Model.Title = "Simple example"
Model.Subtitle = "using OxyPlot in VB.NET"

Dim series1 = New LineSeries()
series1.Title = "Series 1"
series1.MarkerType = MarkerType.Circle
series1.Points.Add(New DataPoint(0, 0))
series1.Points.Add(New DataPoint(10, 18))
series1.Points.Add(New DataPoint(20, 12))
series1.Points.Add(New DataPoint(30, 8))
series1.Points.Add(New DataPoint(40, 15))

Dim series2 = New LineSeries()
series2.Title = "Series 2"
series2.MarkerType = MarkerType.Square
series2.Points.Add(New DataPoint(0, 4))
series2.Points.Add(New DataPoint(10, 12))
series2.Points.Add(New DataPoint(20, 16))
series2.Points.Add(New DataPoint(30, 25))
series2.Points.Add(New DataPoint(40, 5))

Model.Series.Add(series1)
Model.Series.Add(series2)
End Sub

Ensuite, j'essaie d'ajouter plus de données pour simulerchargement dynamique des données. Je sais aussi que je dois utiliser invalidate () et que Update () est obsolète. J'ai ajouté un bouton au formulaire et lui ai donné une autre série à ajouter au graphique au clic.

Clic de bouton:

Private Sub test_Click(sender As Object, e As RoutedEventArgs) Handles test.Click


Dim series3 = New LineSeries()
series3.Title = "Series 3"
series3.MarkerType = MarkerType.Square
series3.Points.Add(New DataPoint(20, 20))
series3.Points.Add(New DataPoint(21, 21))
series3.Points.Add(New DataPoint(22, 22))
series3.Points.Add(New DataPoint(23, 23))
series3.Points.Add(New DataPoint(24, 24))
Model.Series.Add(series3)
Model.InvalidatePlot(True)
End Sub

Voici aussi leur belle référence pour mettre à jour leur dataPlot: http://docs.oxyplot.org/en/latest/common-tasks/refresh-plot.html#examples

Réponses:

2 pour la réponse № 1

Dans votre gestionnaire d'événements, vous devez ajouter series3 à ton Model avant d'appeler InvalidatePlot c'est à dire.

Model.Series.Add(series3);
Model.InvalidatePlot(true);

Mettre à jour

En outre, vous devez vous assurer que votre PlotModel informe la vue (XAML) de vos modifications. Si j'utilise l'exemple de la documentation Oxyplot à titre d’exemple (celui que vous avez spécifié), je modifie le code en tant que tel:

Public Class MainViewModel Implements INotifyPropertyChanged

Private mmodel As PlotModel

Public Event PropertyChanged As PropertyChangedEventHandler _
Implements INotifyPropertyChanged.PropertyChanged

Public Sub New()

Model = New PlotModel()

Model.Title = "Simple example"
Model.Subtitle = "using OxyPlot in VB.NET"

Dim series1 = New LineSeries()
series1.Title="Series 1"
series1.MarkerType = MarkerType.Circle
series1.Points.Add(New DataPoint(0, 0))
series1.Points.Add(New DataPoint(10, 18))
series1.Points.Add(New DataPoint(20, 12))
series1.Points.Add(New DataPoint(30, 8))
series1.Points.Add(New DataPoint(40, 15))

Dim series2 = New LineSeries()
series2.Title="Series 2"
series2.MarkerType = MarkerType.Square
series2.Points.Add(New DataPoint(0, 4))
series2.Points.Add(New DataPoint(10, 12))
series2.Points.Add(New DataPoint(20, 16))
series2.Points.Add(New DataPoint(30, 25))
series2.Points.Add(New DataPoint(40, 5))

Model.Series.Add(series1)
Model.Series.Add(series2)

End Sub

Property Model() As PlotModel
Get
Return mmodel
End Get
Set(value As PlotModel)
mmodel = value
NotifyPropertyChanged("Model")
End Set
End Property

Private Sub test_Click(sender As Object, e As RoutedEventArgs) Handles test.Click

Dim series3 = New LineSeries()
series3.Title = "Series 3"
series3.MarkerType = MarkerType.Square
series3.Points.Add(New DataPoint(20, 20))
series3.Points.Add(New DataPoint(21, 21))
series3.Points.Add(New DataPoint(22, 22))
series3.Points.Add(New DataPoint(23, 23))
series3.Points.Add(New DataPoint(24, 24))
Model.Series.Add(series3)
Model.InvalidatePlot(True)
End Sub

End Class