2009-05-06 10 views
1

Ich versuche Databinding zu verwenden, um Daten an ein Silverlight-Toolkit-Diagramm zu binden. Ich werde eins zu viele Serien haben, so kann ich nicht bestimmen, wie viele Serien ich vor der Hand brauche. Ich möchte auch an ein Databinding-Modell bleiben und nicht programmgesteuert diese Serien hinzufügen, da viele andere Steuerelemente an diese Datenquelle binden.Wie man mehrere Serien in ein Silverilght Toolkit-Diagramm einbindet

Ich fand einen Artikel im Internet von Jeremiah Morrill, der eine Lösung für dieses Problem zeigte.

Jeremiah's solution

Nun arbeitete dies zunächst perfekt, bis ich versuchte, meine Datenbindung der Datenquelle Wert zu aktualisieren, während die Anwendung ausgeführt wurde, und dies würde reflektiert nicht. Als ob es das PropertyChanged-Ereignis nicht abonniert hätte. Ich habe sogar die gleichen Daten an ein Datagrid neben dem Diagramm gebunden, und das Datagrid reagiert wie erwartet, wenn sich die Datenquellenwerte meiner Datenbindung ändern.

In meinem ChartHelper von Jeremias Lösung, habe ich folgende Abhängigkeitseigenschaft

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

Das SeriesSourceChanged Ereignis wird aufgerufen, wenn meine Anwendung startet. Wenn sich die Datenquellenwerte meiner DataBinding jedoch ändern, wird dies nicht erneut aufgerufen.

So Fragen sind wie folgt:

  • Wie kann ich die Property Benachrichtigung mit dieser Lösung erfassen?
  • Kann ich der DependencyProperty etwas hinzufügen, um dies zu erfassen?
  • Ist es etwas, das ich dem Diagramm oder der Reihe hinzufügen muss, um dies zu erreichen?

Ich habe mein Gehirn über diese für mehrere Tage wurde Abstich, so wird jede Hilfe oder Anregungen viel

Dank geschätzt!

+0

ich ein CodePlex issue tracker gebucht haben mit einer Probenlösung umreißt das Problem http://silverlight.codeplex.com/WorkItem/View.aspx?WorkItemId=2973 – WebDude

Antwort

0

Ich habe nie eine Lösung für dieses Problem finden und am Ende mit einem Diagrammsteuer von visifire

fand ich dies viel einfacher zu gestalten, fand aber nie eine nette Art und Weise Datenbindung der Verwendung dieses Ziel zu erreichen und mit einem am Ende programmatischer Ansatz.

1

Der SeriesSource-Typ sollte ObservableCollection anstelle von IEnumerable sein. Dann tun Sie etwas wie folgt aus:

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) 
{ 
} 
Verwandte Themen