Comment faire pour actualiser oxyplot parcelle de la modification des données
Oxyplot graphiques 13 points qui sont dérivés de la 6 la saisie de l'utilisateur des zones de texte. Les valeurs dans les zones de texte sont détenus dans des variables publiques dans la MainWindow.xaml.cs de la classe. Les variables sont mises à jour lorsque l'utilisateur appuie sur entrée dans la zone de texte. Comment pourrais-je faire le bouton actualiser actualiser le graphique.
private void RefreshButton_Click(object sender, RoutedEventArgs e)
{
//Refresh The Graph
}
Je pense que ce serait fait à l'aide de la
PlotModel.RefreshPlot()
méthode, mais je ne suis pas sûr de la façon de la mettre en œuvre en raison de Oxyplot pauvres de la documentation.
- Désolé pour deux ans trop tard, mais le meilleur moyen n'est pas donné ici. Pour ce faire correctement, utilisez oxyplot.wpf, NE PAS utiliser de PlotModel - utilisation de la Parcelle, et de lier vos données à l'ItemsSourceProperty - pas besoin d'appeler Invalider!! Il met à jour que les données mises à jour en temps réel.
- Wow. Je ne peux pas croire que c'est toujours active. Ce projet était il y a si longtemps.
Vous devez vous connecter pour publier un commentaire.
Je viens de mettre à jour vers une nouvelle version de OxyPlot via NuGet. Je suis en utilisant OxyPlot.Wpf v20014.1.277.1 et je pense que vous avez maintenant besoin d'appeler
InvalidatePlot(bool updateData)
sur lePlotModel
au lieu de RefreshPlot (qui n'est plus disponible). Je l'ai testé dans mon exemple de code et cela a fonctionné comme prévu.Si vous voulez vous rafraîchir la parcelle et mettre à jour les collections de données, vous devez passer
true
à l'appel:Plot.Model = ...
etInvalidatePlot
sont assez bon? Je réalise que c'est une question délicate, mais quelle est votre première pensée?true
comme un argument, c'est la valeur par défaut du paramètre. Aussi, je confirme queRefreshPlot
n'est plus disponible dans les nouvelles versions.Donner
x:Name
à OxyPlot exemple dans le code XAML:et sur le bouton gestionnaire de clic, d'actualiser comme ceci:
La façon la plus propre que j'ai trouvé pour obtenir "une sorte de" mise à jour automatique qui réagit à CollectionChanged sur la collection qui est LineSeries' ItemsSource.
Dans Le ViewModel:
PropertyChanged
événement dépend de la MVVM de la bibliothèque que vous utilisez. Avec MvvmLight, le Viewmodel généralement hériter deViewModelBase
, qui a laRaisePropertyChanged
méthode. D'autres bibliothèques peuvent être différentes.Après avoir la même question avec le même problème, il semblerait que la seule solution de travail (au moins à mon point de vue) est comme suit :
PlotView.InvalidatePlot(true)
De le faire, après la mise à jour d'un ou de plusieurs
Series
faire actualiser votrePlotView
.Le taux de rafraîchissement dépend de la façon dont souvent, ou au cours de laquelle le taux de votre série(s) est/sont mis à jour.
Voici un extrait de code (sur Xamarin Android, mais devrait fonctionner de toute façon) :
Maintenant, quand vous avez besoin d'ajouter
DataPoints
à votreLineSerie
et à la mise à jour automatiquement laPlotView
en conséquence, il suffit de faire comme suit :Le faire automatiquement actualiser votre
PlotView
.Sur une note de côté, la
PlotView
sera également mis à jour lorsqu'un événement se produit comme une touche, une pincée de zoom, ou n'importe quel type de l'INTERFACE utilisateur, des événements liés.J'espère que je pourrais aider. J'ai eu du mal avec ce pour un temps très long.
Dans le courant OxyPlot.Wpf (1.0.0-unstable1983), vous avez deux options:
Series.ItemsSource
propriété de XAML pour une collection dans votre viewmodel et à l'échange de l'ensemble de la collection, quand vous avez besoin d'une mise à jour. Cela permet également simultanées async mises à jour avec de plus grands ensembles de données.Plot.InvalidateFlag
propriété de typeint
à votre viewmodel et de l'incrémenter à chaque fois que vous besoin d'une mise à jour. Je n'ai pas testé cette approche, bien qu'.Le code suivant illustre les deux options (en choisir un). XAML:
Mises à jour sur le ViewModel:
Existe trois variantes comment actualisation de la parcelle (à partir de OxyPlot documentation):
Model
propriété de laPlotView
contrôleInvalidate
sur lePlotView
contrôleInvalidate
sur lePlotModel
Un autre deux ans plus tard... cette solution fonctionne pour moi, car je n'ai pas oxyplot modèles et Im manque des fonctions nommées à partir de ci-dessus.
code derrière:
De mettre à jour vos données ne pas l'échange de l'ensemble de la IList, plutôt ajouter de nouveaux points de données et supprimer les anciens à la position 0.
XAML:
important, ce sont les x:Name="myChart" et ItemsSource="{Binding Points}"
J'espère que cela est utile pour quelqu'un là-bas