2014-03-04 36 views
0

我該怎麼做: 我在場景之間切換。他們中的大多數都綁定了一些視圖模型。這個只有1個對象就具有綁定到observableCollection的功能。當我離開時,我想清除收藏夾以確保它在下載時不會顯示舊數據或其他內容,而是加載新收藏夾。wp8清除ObservableCollection很慢

我打電話backkeypress後明確的功能,所以它的immediatelly刪除:

void PageBackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    App.ViewModel.JobDetail.Clear(); 
} 

JobDetail[0].Remove();JobDetail.RemoveAt(0);但還是同樣的效果試了一下: 它還挺凍結,然後20秒的東西后運行。如果我用backkey離開它,它似乎不會對backkey做出反應,然後立即執行我所有的backkey命中(大部分關閉應用程序)。如果我在加載之前嘗試清除,我會看到一個空白的白色屏幕,並在相同的20秒後顯示場景,然後開始下載(這需要幾秒鐘的時間)。

我嘗試加載的ViewModel包含大約15個字符串和3個短字符串列表(最多5個元素)。 與其他ViewModels我有50個元素,每個有大約10個字符串和相同的3個字符串列表,我離開時沒有任何問題來清除列表。

任何想法?

我讀過這發生了很多與我使用的VS2013。但是,如果我打開或關閉調試,使用其他模擬器或實際設備,它沒有任何區別。同樣的問題。

+2

是否有一個原因,你沒有爲每個頁面使用單獨的視圖模型實例? –

+1

RowlandShaw指出,你真的不應該爲所有頁面使用靜態ViewModel,但它需要大量的重構。嘗試'App.ViewModel.JobDetail = new ObservableCollection <..>()',這可能有幫助。 – lisp

+0

這就是我這樣做的方式。但是我每次訪問它時都想重新加載這個頁面。這就是爲什麼我在進入或離開時試圖刪除視圖模型的原因。 隨着其他頁面的嘗試,每當內容發生變化時我都會做同樣的事情:我在按下backkey後刪除並在下一次再次輸入時加載。作品完美無瑕。這裏需要20秒,而這只是一個元素。這可能是原因嗎?因爲我刪除了元素[0],它釋放了整個viewmodel的內存或其他內容? – ecth

回答

0

好了,解決辦法很簡單:

void PageBackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    DataContext = null; 
    App.ViewModel.JobDetail.Clear(); // delete previous search 
} 

在其他類我沒有設置的DataContext爲null,但不知何故,它完美。在這個類中刪除綁定的數據會產生巨大的性能問題。就像我說大約20秒延遲,而通常一切都很好,很快。

希望它能幫助未來的其他人:)