2009-05-06 5 views
1

J'essaie d'utiliser la liaison de données pour lier des données à un graphique Silverlight toolkit. Je vais avoir un à plusieurs jeux de séries donc je ne peux pas déterminer combien de séries j'ai besoin avant main. Je veux aussi m'en tenir à un modèle de liaison de données et ne pas avoir recours à l'ajout par programmation de ces séries car de nombreux autres contrôles se lient à cette source de données.Comment numériser des séries multiples vers un graphique Toolkit Silverilght

J'ai trouvé un article sur le web de Jeremiah Morrill qui montrait une solution à ce problème.

Jeremiah's solution

Maintenant, cela a parfaitement fonctionné au début, jusqu'à ce que j'ai essayé de mettre à jour mon valeurs de liaison de données DataSource alors que l'application est en cours d'exécution, et cela ne refléterait pas. Comme s'il n'était pas abonné à l'événement PropertyChanged. J'ai même lié les mêmes données à une grille de données à côté du graphique, et la grille de données réagit comme prévu en changeant chaque fois que les valeurs de la source de données de ma liaison de données changent.

Dans mon ChartHelper de la solution de Jérémie, j'ai la propriété de dépendance suivante

public static readonly DependencyProperty SeriesSourceProperty = 
     DependencyProperty.RegisterAttached("SeriesSource", 
              typeof(IEnumerable), 
              typeof(ChartHelper), 
              new PropertyMetadata(SeriesSourceChanged)); 

L'événement SeriesSourceChanged est appelée lorsque mon application démarre. Toutefois, lorsque les valeurs de la source de données de ma DataBinding changent, elle n'est pas appelée à nouveau.

Alors questions sont les suivantes:

  • Comment puis-je saisir la notification PropertyChanged avec cette solution?
  • Y at-il quelque chose que je peux ajouter à DependencyProperty ci-dessus pour capturer cela?
  • Est-ce quelque chose que j'ai besoin d'ajouter au tableau ou à la série pour y parvenir?

Je creusais mon cerveau été sur ce pendant plusieurs jours, de sorte que toute aide ou suggestions seront très appréciés

Merci!

+0

J'ai posté un problème CodePlex suivi avec une solution échantillon décrivant le problème http://silverlight.codeplex.com/WorkItem/View.aspx?WorkItemId=2973 – WebDude

Répondre

0

Je n'ai trouvé une solution à ce problème et a fini par l'aide d'un contrôle graphique de visifire

J'ai trouvé beaucoup plus facile à personnaliser, mais jamais trouvé une belle façon d'utiliser la liaison de données pour y parvenir et a fini avec un approche plus programmatique.

1

Le type SeriesSource doit être ObservableCollection au lieu de IEnumerable. Ensuite, vous faites quelque chose comme ceci:

private static void SeriesSourceChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) 
{ 
    var sender = o as YourType; 
    var newCollection = e.NewValue as ObservableCollection<DataSetViewModel>; 
    if (newCollection != null) 
    { 
     newCollection.CollectionChanged += new NotifyCollectionChangedEventHandler(sender.OnCollectionChanged); 
    } 
} 

private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
{ 
} 
Questions connexes