2016-08-02 21 views
1

Ich mache WPFToolkit-basierte Graphen, wo ich versuche, AreaSeries jedes Mal zu aktualisieren, wenn ich auf eine Schaltfläche klicke. Ich habe INotifyPropertyChanged für meine Datenklasse implementiert. aber wenn ich die Daten im Quellobjekt-ID nachladen nicht Updates in Diagramm (Zielobjekt)So aktualisieren Sie WPFToolkit AreaSeries-Diagramm auf Schaltfläche Klicken Sie auf

der Code ist wie folgt:

public partial class MainWindow : Window 
{ 

    static List<Ready4LOS> Ready4LOS = new List<Data.Ready4LOS>(); 





    public MainWindow() 
    { 
     InitializeComponent(); 

     chart1.DataContext = Ready4LOS; 
     InitChart(); 
     LoadData(); 
    } 

    private void LoadData() 
    { 
     var path = @"zxzxzxz.log"; 
     Ready4LOS.Clear(); 
     List<APISTATDataModel> daa = APISTATDataModel.GetFromFile(path, new string[] { "|" }, "Ready4TOS"); 

     List<APISTATDataModel> lastn = daa.GetRange(daa.Count - 10, 10); 

     foreach (APISTATDataModel d in lastn) 
     { 
      Ready4LOS.Add(new Ready4LOS() { Case = d.Current_Count, Time = d.Current_Time }); 

     } 

    } 

    private void InitChart() 
    { 
     System.Windows.Data.Binding indi = new System.Windows.Data.Binding("Case"); 
     System.Windows.Data.Binding dep = new System.Windows.Data.Binding("Time"); 
     dep.Mode = System.Windows.Data.BindingMode.OneWay; 
     indi.Mode = System.Windows.Data.BindingMode.OneWay; 
     AreaSeries ares = new AreaSeries(); 
     ares.ItemsSource = Ready4LOS; 
     ares.IndependentValueBinding = dep; 
     ares.DependentValueBinding = indi; 
     ares.Title = "Ready4LOS"; 

     DateTimeAxis dta = new DateTimeAxis(); 
     dta.Interval = 10; 
     dta.IntervalType = DateTimeIntervalType.Minutes; 
     dta.Title = "Time"; 
     dta.Orientation = AxisOrientation.X; 
    // dta.Minimum = DateTime.Now.AddMinutes(-90); 
     // dta.Maximum = DateTime.Now; 

     LinearAxis yaxis = new LinearAxis(); 
     yaxis.Minimum = 0; 
     yaxis.Interval = 2; 
     yaxis.Title = "Case"; 
     yaxis.Orientation = AxisOrientation.Y; 
     yaxis.ShowGridLines = true; 
     chart1.Axes.Add(yaxis); 
     chart1.Axes.Add(dta); 
     chart1.Series.Add(ares); 



    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     LoadData(); 
     chart1.UpdateLayout(); 

    } 



} 

}

das Datenmodell ist hier

Es lädt perfekt, wenn es beginnt, wie ich die LoadData() am Anfang aufgerufen habe. Das Problem ist, wenn ich auf die Schaltfläche zum Aktualisieren klicken lädt es die Daten in das Quellobjekt, aber die Daten des Zielobjekts in nicht aktualisiert, d. H. Diagramm wird nicht aktualisiert es bleibt gleich wie bei den ersten Daten.

Antwort

1

Verwenden Sie ObservableCollection<Ready4LOS>, nicht List<Ready4LOS>. ObservableCollection<> implementiert bereits INotifyPropertyChanged und auch INotifyCollectionChanged. Ihre Implementierung von INotifyPropertyChanged für Ready4LOS ist möglicherweise nur erforderlich, wenn Sie die Werte für Case und Time für vorhandene Ready4LOS, die sich bereits in Ihrer Sammlung befinden, dynamisch ändern.

enter image description here

+0

Wow, ich wusste nie, dass .. werden auf jeden Fall versuchen, und lassen Sie – rvsingh42

+0

Dank für die Zeit nehmen, kennen und mir helfen ... speziell für diesen jif Sie dort setzen. – rvsingh42

+0

Kein Problem, mein Vergnügen. – jsanalytics