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 № 1Dans 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