2012-03-19 114 views
0

我使用DispatcherTimer()來調用更新函數來更新其中數據更新的數據庫的列表視圖。所以,listview就像儀表板一樣使用。更新WPF列表視圖作爲數據庫表更新

private void Update(){ 
     DateTime d = DateTime.Today; 
     items = (from i in DataManager.Entities.signals 
           where i.Date > d 
           orderby i.Id descending 
           select i).Take(MAX_NUM_OF_DISPLAYED); 

     this.lvDashboard.ItemsSource = items;   
    } 

它工作正常,直到達到一定數量的數據。我知道我可以查詢數據庫中上次更新的數據並將其添加到itemssource。我試圖讓我的代碼簡單明瞭。你能提出任何想法或建議嗎?

----------------更新---

,每天1-2秒更新1000行數據和數據的窗口都會移動到最近的數據。過程記憶不斷增長的一些原因。 DataTable是否監視數據庫更新?如果數據庫更新了一些其他地方,DB綁定的DataTable會自行更新嗎?

+0

什麼時候它確切地失敗(你是否更新你的列表視圖相當頻繁)? – MrClan 2012-03-19 11:53:35

+0

簡單明瞭往往不能很好地與快速一起工作;)但正如所有的人已經建議。重置ItemsSource顯然是你能做的最糟糕的事情。只需使用數據綁定的力量,使用ObservableCollection作爲ItemsSource,將數據添加到列表中,然後讓其餘部分通過wpf處理。 – dowhilefor 2012-03-19 13:45:10

回答

0

這將是更多的工作,但如果只有一部分數據發生變化,然後使物品ObservableCollection和添加和刪除項目。不要重新綁定。

0

如果您綁定到DataView(底層DataTable指向一個數據庫表)的DataTable完成Commit會自動刷新DataView和圖形用戶界面將顯示它。但是,除了代碼之外,更新表格並且需要在GUI上看到更新,因此您可能需要考慮一些發佈者訂閱者模型。