2012-02-13 68 views
1

我有一個小應用程序,我有一個gridview。該網格綁定到一個看起來像這樣的源(列表):首先加載網格,然後在每個瓦片上執行異步操作

Person {name;電子郵件;訂單;} - 訂單是一個IEnumerable。

現在的挑戰是我希望網格在沒有首先加載訂單列表的情況下加載。這是aysnc進入畫面的地方。當網格加載並顯示人物姓名和電子郵件時,它應該在幕後開始加載每個人的訂單。當訂單準備就緒時,應該顯示它們。

我已經嘗試了幾種方法:

  1. 負載一切與異步,這是一個不錯的辦法,但電網首次表示將所有源數據準備好。爲什麼?

  2. 加載沒有訂單列表的人員來源(列表),並嘗試在網格顯示後爲每個人加載訂單。我沒有做到這一點,因爲我似乎無法找到正確的「鉤子」,在WebForms中,一個datagrid會有一個「OnItemDataBound」事件,我可以掛鉤進去。任何線索?

  3. 調度員幕後的東西...複雜和僵化。

它可能是我忽略的控制功能。

任何幫助,非常感謝。無碼在這一刻avalible(忘在家裏了:))

+0

1.有道理。如果你正在加載一切異步,那麼它會顯示什麼時候一切都加載。 2.不知道WPF有這個事件。 3.調度員是正確的工具。調度員有很多選擇 - 我不明白你怎麼稱之爲僵化。現在異步是僵化的 - 它只有一個選項。另一種方法是將訂單放在一個細節中,並在得到訂單之前得到訂單(但將它們保存在get中,以便如果再次獲取該細節,則將其緩存)。 – Paparazzi 2012-02-13 14:21:34

回答

1

這是我會怎麼做(在Silverlight):

  1. 製作的異步調用並加載者與每個空的ObservableCollection名單訂單... GridView顯示數據(名稱,電子郵件)。
  2. 當人員異步調用完成後,再次調用訂單,當它返回時,用適當的訂單填充每個空訂單集合。

如果您使用ObservableCollection,那麼訂單將顯示何時填充每個集合。我假設你有某種鑰匙來確定哪些訂單與哪個人在一起。

這將是這樣的,當訂單回來:

For Each p As Person In PersonsList 
    Dim id = p.PersonId 
    p.Orders = (From o As Order in OrdersList Where o.PersonId = id).ToList 
Next 

這是psudo-VB代碼,僅僅是一個例子。基本上,關鍵是使用ObservableCollection來代替通用的IEnumerable,以便集合在你添加或刪除某些東西時會更新。

+0

啊,當然......我已經離開了WPF和Silverlight太久了。 INotifyPropertyChanged與你所擁有的指針一起使用了這個技巧。謝謝! – danielovich 2012-02-14 13:06:33

相關問題