2011-10-26 208 views
1

我有我循環的對象列表並創建控件。然後,我將這些控件中的每一個都放入listboxitem的內容中,並將其添加到列表框中。Silverlight ListBoxItem糟糕的表現

我似乎變得很糟糕的表現。我的代碼評論了一些內容,看起來,如果內容充滿了控制性能,就會出現在窗口之外。創建80個這些列表框似乎需要4分鐘任何人知道爲什麼或如何解決這個問題?

代碼示例:

foreach (var service in e.Result) 
      { 
       ListBoxItem lbi = new ListBoxItem(); 
       lbi.Tag = service.ServiceId; 

       SmallServicePanel ssp = new SmallServicePanel(); 
       ssp.DisplayText = service.DisplayText; 
       ssp.ServiceTemplateId = service.ServiceTypeId; 
       ssp.ServiceId = service.ServiceId; 
       ssp.HexColor = service.HexColor; 

       lbi.Content = ssp; 
       MyListBoxControl.Items.Add(lbi); 
      } 
+0

80(!)列表框在一個對話框中?多麼可愛的小對話;-) – Fischermaen

+0

不幸的是,這是客戶想要的,它用來過濾掉,但他們想要一個「全部」選項。 –

+0

我也遇到過這個問題,整個UI凍結時,它將這些usercontrols加載到列表框 – Rumplin

回答

2

而不是迭代地創建控件(這是慢許多對照)使用結合集合和一個DataTemplate顯示您的顯示對象(SmallServicePanel等)。

一旦你有了它,它將使用ListBox的虛擬化功能(或選擇另一個提供虛擬化的控件)。這意味着存在的實際控制的數量不會超過所顯示的數量,並且性能將會出現飛躍。

讓我們知道你是如何去。

+0

謝謝,它完美的作品。 –