2010-04-16 58 views
1

我正在嘗試構建一個應用程序以便像twitter一樣使用網站,並且我試圖解決的問題是 - 我如何使用背景更新UI工作人員,只添加顯示最新的帖子(如果你願意的話,可以發推文) 在包裝面板的頂部而不會刪除已經存在的文件?C#4.0 .net 4和WPF UI更新

在我以前的嘗試中,我通過將推文/帖子存儲在本地SQlite數據庫中,然後檢索導致UI凍結一小段並重新加載所有帖子的最後10個帖子來完成此操作。

任何想法?

回答

5

由於您使用的是WPF,所以這很簡單。

只需將您的「帖子」存儲在ObservableCollection<T>。然後你可以在列表前面的新項目Insert。如果你已經將它綁定到一個ItemsCollection控件上,那麼WPF將會爲你正確地處理所有事情。

除非你有很多元素,否則這將工作得很好,而且速度相當快。我會首先嚐試它(因爲它很容易實現),並且只有在發現它存在性能問題時才嘗試獲得更多「聰明」。不過,如果您使用正確的集合,我懷疑您會遇到問題,因爲WPF與ObservableCollection的數據綁定速度非常快。

+0

這是非常好的解決方案,但在我的情況下,我必須更新一個自定義控制堆棧面板,我找不到如何將集合綁定到堆棧面板,然後更新自定義控制堆棧面板 – Aviatrix 2010-04-17 13:23:02

+0

使用ListView而不是StackPanel。它的表現非常相似,但「只是工作」 – 2010-04-17 16:22:43

0

使用數據綁定。 UI元素將數據綁定到集合中記錄的字段。多行的面板應該是某種類型的ItemCollection(最有可能的是Listbox),以便它將複製底層數據集合中每行的項目數據模板。

之後,如果集合實現INotifyCollectionChanged,UI將跟蹤對底層集合所做的任何更改。如果您使用的是內存集合,那麼您可以將新數據添加到集合的頂部(在索引0處插入),並且會在UI顯示中將所有舊項目向下推送。如果使用基於文件或服務器的數據源,則可以在後臺線程中獲取數據,並將更新發布到前臺線程上的內存集合中。只是不要從後臺線程更新數據綁定集合。