我有一個綁定到對象列表的WPF列表視圖。其中一個要顯示的項目是計算屬性(只讀,返回一個字符串),需要花費很少的時間進行計算。最初加載窗口時(或任何時候使用Notify事件更新UI),UI將在此數據綁定發生時掛起。我想知道的是一個很好的機制來處理這個問題(理想情況下,我希望按照使用微調框和文本「正在處理...」或類似文字)使屏幕變灰的方式進行操作。如何在WPF ListView處於DataBound狀態時顯示進度微調器(或其他用戶界面)?
我以爲我可以通過捕獲數據綁定事件的開始併發布故事(或類似事件)並在數據綁定事件結束時停止故事來做到這一點,但我無法找到那種性質的事件。
是否有推薦的機制來處理長數據綁定或我正在查找的事件是否存在,但是我正在尋找錯誤的位置?任何幫助,將不勝感激。
編輯:我能得到一個旋轉圖標(Cursor.Wait),而數據源和數據綁定(使用下面的解決方案的一部分),但是現在需要知道數據綁定完成時。 .Loaded事件似乎在控件放在屏幕上時立即觸發(這會立即發生),但在數據更新時不會發生。有沒有一個ListView的OnDataBoundCompleted類型事件,有關如何在數據綁定過程完成時得到通知的想法/想法?
編輯:現在看看TargetUpdated事件,但得到一些奇怪的結果。如果我在TargetUpdated的事件處理程序中放置消息框,則會更新UI(ListView顯示數據),然後顯示消息框。如果我刪除了消息框並只是有一個變量設置(即IsBusyCursor = Cursors.Arrow),它會在ListView顯示數據之前執行此操作。
**解決方案:**我最終創建了一個新的演示文稿對象並設置了Cursor = Wait,然後循環遍歷之前綁定到ListView的對象並創建演示文稿對象(這導致要執行的計算屬性),那麼一旦創建了展示對象列表,就將這些列表綁定到了ListView,並且使用Cursor = Arrow。令人失望的是,似乎並未出現DataBinding Completed類型事件(或者在數據綁定完成後觸發任何事件以更新UI可用),但此解決方案似乎可行。
這將工作得很好,如果它是一個長時間運行的計算,我正在調用(或類似),但因爲它被埋在一個屬性列表中的對象列表中,我沒有能夠以這種方式分離出來。 – ChrisHDog 2010-09-29 22:51:00
這聽起來像是應該在單獨的線程上完成計算,而不僅僅是在數據綁定時間。否則,您將在計算執行時鎖定UI。過去我成功做到這一點的一種方法是使用擴展方法進行計算,在單獨的線程上調用。這是一個相當複雜的過程,爲此BackgroundWorker是一個簡化(在適合設計的情況下)。 – 2010-09-30 13:33:36