2017-08-25 129 views
0

我的ListViewGridView,因爲它的ViewListViewItemsSource綁定到ViewModel中的ItemsCollection。WPF:如何在不阻止動畫的情況下更新UI

GridView有很多列和ListView可以有很多項目。

當窗口正在加載或用戶更新此ListView我顯示加載動畫,同時從服務器檢索新數據和更新ViewModel中的ItemsCollection與新數據。

這種數據檢索已經異步完成,所以加載動畫不斷旋轉。但只要檢索到數據並且綁定要更新ListView,加載動畫就會凍結,直到完成UI的更新。

即使綁定更新UI,我如何才能讓我的加載動畫繼續旋轉?

謝謝你的幫助。

+0

您是否正在使用大量記錄更新ObservableCollection?如果是這樣,每個單獨的記錄添加都會觸發一個CollectionChanged事件。每個事件都會觸發UI更新。 –

+0

是的,我更新了ViewModel中的ObservableCollection,並且此UI更新凍結了UI線程上發生的動畫。 – Nostromo

+0

我遇到了一個問題,我需要將約1k條目添加到ObservableCollection中,並且UI在數秒內變得無響應。我通過創建一個派生自具有BulkAdd()方法的ObservableCollection的類來解決此問題。它只在所有條目添加完畢後才引發單個事件。性能大大提高。 –

回答

-1

編輯:

嗯,這在主線程運行結合,同一個線程動畫運行。

很明顯,我以前的解決方案不會幫助你。你將不得不尋找一種方法來減少渲染視圖所需的時間。分享一些工作代碼,也許有人可以幫助你。

其他選擇是停止動畫並顯示靜態的東西。這樣你就隱藏了問題。它不是一個很好的解決方案,但如果你找不到其他的,這可能是你唯一的解決方案。

+0

我知道,我已經異步獲取我的數據。這是在獲取阻止動畫的數據之後綁定的更新。 – Nostromo

+0

請分享一些代碼。當你說更新綁定時,是否更新作爲ListView源的綁定屬性? –

+0

是的,我更新了我的ViewModel中的ObservableCollection,這是我的ListView綁定到的ItemsSource。我明天只能在這裏寫一些代碼。 – Nostromo

相關問題