2012-02-10 84 views
0

我有一個緩衝區列表,顯示在telerik radchart中。 它正確顯示,但是當一個(或多個)緩衝區更新時,我想更新圖表以反映新狀態。 我能做的唯一事情就是重新創建圖表,從頭開始,這是一個非常簡單的解決方案,但不是很聰明...所以我的問題是,如果有一個特殊的RadChart類型或一些選項來設置獲取圖表當映射爲DataSeries的一個集合發生更改時自動進行更新。 任何人都可以提供幫助嗎?當數據發生變化時更新telerik圖表

下面是我用它來創建圖表的代碼:

private void createChart() 
    { 
     //Set axis stuff and clear old configuration here 

      //Create a dataseries for each values to draw 
      foreach (ChannelKeyValueConfiguration channelKeyValue in this.Device.Configuration.ChannelConfigurations) 
       { 

        IChannel channel = this.Device.Channels[channelKeyValue.Name]; 

        DataSeries serie = new DataSeries(); 
        serie.Definition = new LineSeriesDefinition(); 
        serie.LegendLabel = channel.Description; 

        int i = 0; 
        int elNumber = channel.Measure.Buffer.Count; //Neeeded to set xAxis values 
        DateTime minTime = channel.Measure.TimeStamp.Value.AddMilliseconds(-1 * elNumber * channel.Measure.PollingTime); //Neeeded to set xAxis values 

        foreach (double point in channel.Measure.Buffer) //Buffer is a Queue<T> that i use as data provider. It updates each x seconds. 
        { 
         i++; 
         serie.Add(new DataPoint() { XValue = minTime.AddMilliseconds(i * channel.Measure.PollingTime).ToOADate(), YValue = point }); 
        } 

        RadTimeChart.DefaultView.ChartArea.DataSeries.Add(serie); 
       } 
      } 

然後,我有一個事件處理程序,應更新圖表。由於我不知道如何實現它,它只是重新創建它,以便它被更新。

void StatusChanged(object sender, EventArgs e) 
    { 
     Dispatcher.BeginInvoke(new Action(delegate 
     { 
      createChart(); 
     })); 
    } 

請我如何能更好地處理更新一些想法。 在此先感謝!

回答

0

經過大量的搜索和測試後,我發現telerik的圖表很慢並且有時候使用內存,如果不使用隊列來燉圖表,那麼開始會一致地增加內存。 然而,他們確實給出了一些非常好的examples in their site,就像Live Data示例一樣,這幾乎是我一直在尋找的。

相關問題