2011-05-11 188 views
1

我使用WPF DataGrid組件從.NET框架4,它被綁定到一個線程安全的觀察的集合,我發現在這裏:http://www.deanchalk.me.uk/post/Thread-Safe-Dispatcher-Safe-Observable-Collection-for-WPF.aspx慢WPF 4的Datagrid刷新

該方案是一個系統管理工具,它坪每個IP地址在一個範圍內,如果有響應,它會在集合中創建一個對象,並帶有計算機的一些細節。

我遇到的問題是性能不佳。最初,我只是更新了Collection,並讓DataGrid獲取了更改。這導致DataGrid控件不刷新並顯示數據除非我滾動的問題。

所以我增加了一個定時器來調用網格刷新方法,定時器每隔750ms進行一次滴答。這個工作出色,直到我意識到程序UI完全沒有響應,而定時器啓用,它正在掃描。

沒有定時器,性能是可以接受的,沒有它,它是可怕的。我已經嘗試了超時期限(高達2000毫秒)的幾個值沒有任何運氣,也確保我的列是固定寬度(我讀了自動生成的列和寬度可能會導致性能問題)。

網格中的行數大約爲300 - 400,有5列,所以它不是一個巨大的網格。

有沒有人有任何建議,我可以如何在不犧牲性能的情況下及時更新網格後面的集合?

回答

4

如果您的綁定是正確的,您將不需要手動刷新DataGrid。更新場景後面的可觀察集合應自動觸發(假設您已實現NotifyPropertyChanged)DataGrid的更新。 300 - 400不是一個會減慢DataGrid的數字。您的DataGrid是否在ScrollViewer內部?有時也會降低性能。確保你的綁定工作正常,那麼你不需要手動刷新。

+1

謝謝@haris,我已經在我的類中實現了INotifyPropertyChanged接口,現在網格正在更新而不需要刷新。 – leinad13 2011-05-11 14:18:37

+0

INotifyPropertyChanged是一件好事!謝謝! – 2011-11-21 04:34:49