2010-09-30 70 views
0

當收集更改時,如何更新WPF圖表?我正在使用WPF圖表(System.Windows.Controls.DataVisualization.Toolkit.dll版本3.5.50211.1)來繪製一些簡單的數據。數據的類如下所示:如何刷新我用來顯示一些數據的WPF圖表(WPF工具包圖表)

public class EngineMeasurementCollection : Collection<EngineMeasurement> 
{ 

} 
public class EngineMeasurement 
{ 
    public int TimeStamp { get; set;} 
    public int Speed { get; set; } 
    public int Torque { get; set; } 
    public int Power { get; set; } 
} 

在我的Mainform中,我正在接收事件回調的新數據。這回到另一個線程。我查看數據以查看是否有新的TimeStamp。如果是,我將它添加到我的收藏中。然後我忠心地致電

Dispatcher.Invoke(myDelegate, DispatcherPriority.Normal,null) 

讓自己回到GUI線程。然後我打電話:

m_ctrlLineSeriesTorque.ItemsSource = m_TorqueCollection; 

嘗試獲取圖表進行更新。我已驗證我進入此代碼。我還證實,如果我只是將一些值引入EngineMeasurementCollection的構造函數,我可以顯示圖表。在向集合添加更多值時,如何獲取圖表以進行更新?

某處我看到圖表本身可能存在「刷新」方法。我沒有看到。另外,我看到可能EngineMeasurementCollection應該是一個「Observable集合」,並且EngineMeasurement應該實現一些接口。真正?

謝謝, 戴夫

+0

在我看來,我的EngineMeasurementCollection,m_TorqueCollection是在MainWindow.xaml.cs中定義的,我正從另一個線程上調用的事件訪問它。據推測,當我將EngineMeasurements添加到集合中時,我需要做某種線程鎖定?這裏有一些最佳實踐嗎? – Dave 2010-09-30 15:31:44

回答

3

是的,你EngineMeasurmentCollection應該是一個ObservableCollection。然後您將無法再執行其他任何操作,只需向集合中添加(或刪除)項目,WPF綁定系統將負責其餘部分以更新圖表。這就是你應該使用可觀察集合的原因。

+0

+1正如Miky D所說。使其成爲ObservableCollection。或者在EnginerMeasurementCollection是屬性的類中實現INotifyProeprtyChanged,並引發屬性更改通知。 – 2010-09-30 18:29:49

+0

謝謝!正是我需要的。 – Dave 2010-10-01 17:56:37