2011-03-03 134 views
0

我有5個集合的視圖模型。異步加載MVVM集合

所有這些都異步加載。

我需要從服務中加載主實體,並根據實體中的值設置每個集合的選定值。在加載實體並設置所選值之前,如何等待所有集合已加載?

我覺得我失去了一些東西。

回答

0

當您的MainViewModel(具有「主要實體」的那個)完成加載時,請設置其SelectedRecord屬性。設置此屬性應該引發事件或廣播其他ViewModel可以偵聽的消息。

當其他ViewModel從主視圖模型接收到消息時,將IsDirty標誌設置爲true。那麼其他的ViewModels將設置其屬性SelectedData時,他們完全加載(在該MainViewModel首先完成的情況下)或者當IsDirty設置爲true - 以先到者爲準

+0

我只有一個ViewModel。它有5個可觀察的集合。 – 2011-03-03 21:30:12

+0

好 - 同樣的原則適用。當主實體完成加載時,有兩種可能性: 1.其他集合仍在加載 - 在這種情況下,您設置了一個標誌,指示主數據已加載。一旦其他集合加載,您將設置其餘屬性 2.其他集合已完成加載 - 在這種情況下,您可以設置其餘屬性 – cordialgerm 2011-03-04 06:48:39

0

如果他們是快速加載,你可以只鏈中的負載調用前一個回調的下一個負載。

如果沒有,則將所有集合保留爲空/無(許多人在構造函數中初始化它們)以及每個集合的負載回調,在填充之前實例化集合,如果沒有返回實體/結果,則將其留空。然後調用一個函數來檢查這些集合是否爲空/無,並且一次調用所有集合的inotify。

一個類似的方法可以讓你在加載之前實例化你的集合,那就是爲你的集合創建一個附加屬性「isLoaded」並使用它。