2010-02-15 4 views
1

J'ai la collection suivante, qui sert de stockage global pour un groupe de LineSeries ItemsSources pour un graphique.WPF Liaison de données dans la question de code

public ObservableCollection<ObservableCollection<Data>> AllDataSeries; 

Ladite collection peut changer de temps en temps, quand il est remis à zéro, j'effacer le tableau de toutes les séries - et quand il est repeupler à nouveau, je suis d'ajouter autant de séries au tableau que le AllDataSeries.Count me dit à.

À ce stade, j'ai besoin de définir la liaison.

for(int i = 0; i < AllDataSeries.Count; i++) 
{ 
    var series = new LineSeries { IndependentValuePath = "X", DependentValuePath = "Y", Title = "SomeSeriesTitle" }; 

    Binding binding = new Binding("#?????#"); 
    binding.Mode = BindingMode.TwoWay; 
    binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 

    series.SetBinding(ListView.ItemsSourceProperty, binding); 
    MyChart.Series.Add(series); 
} 

La chose est, je n'ai aucune ide comment composer le chemin pour la liaison. J'ai essayé:

String.Format("AllDataSeries[{0}]", i) 

mais cela n'a pas fonctionné.

Comment dois-je définir la propriété Path sur la liaison?

Répondre

1

AllDataSeries est-il réellement un champ et non une propriété? Je ne pense pas que PropertyPath suivra un domaine public. Il est recommandé de ne pas exposer les champs publics de toute façon vous devriez probablement changer cela à:

public ObservableCollection<ObservableCollection<Data>> AllDataSeries 
{ 
    get; 
    private set; 
} 

Mais pour répondre à votre question sur la syntaxe de liaison, je crois que votre syntaxe PropertyPath est correcte. Bien que je suis nerveux à propos d'ObservableCollection imbriqué comme ça. Personnellement, je voudrais juste renoncer à la liaison tout à fait et faire quelque chose comme:

series.ItemsSource = AllDataSeries[i]; 

Il ne ressemble pas à des modifications à la collection AllDataSeries vont déclencher une nouvelle série étant ajouté de toute façon. Avez-vous pensé à définir le DataContext du graphique? En option, vous pouvez définir la propriété Source de la liaison. Enfin, vous devez remplacer BindingMode par OneWay et supprimer UpdateSourceTrigger. Un graphique est un contrôle en lecture seule et il n'y a donc aucune raison d'avoir une liaison bidirectionnelle.

Espérons que cela aide.

+0

Hey, merci pour une réponse détaillée. AllDataSeries est une propriété (il est minuit passé ici et je ne pense plus très clairement). J'ai trouvé une erreur dans la ligne series.SetBinding, (elle devrait être la propriété LinearSeries.ItemsSource, pas ListView.ItemsSource). Cela ne fonctionne toujours pas, après l'appel SetBinding la ItemsSource est null. des idées? J'ai défini le DataContext du graphique. – Maciek

+0

Avez-vous essayé de définir explicitement la source de la liaison? Je m'attendrais à ce que le DataContext se propage à la série, mais je n'ai pas vraiment d'expérience avec les contrôles graphiques de la boîte à outils WPF. – Josh

+0

Je dois aussi réitérer que le deuxième paragraphe de votre question m'indique que vous ne gagnez vraiment rien en établissant une reliure ici. Bien sûr, je voudrais savoir pourquoi la liaison ne fonctionnait pas aussi mais à la fin, je pense que vous feriez mieux de configurer ItemsSource = AllDataSeries [i] dans ce cas. – Josh