2011-12-12 28 views
7

當用戶到達列表框的底部時,我試圖實現懶惰的「加載更多」項目,但每次我嘗試向列表框中添加新項目時,我都會得到如下結果這:在只讀集合上不支持的操作c#wp7

「在只讀集合上不支持操作」。

我已經嘗試了幾個從論壇到博客的解決方案似乎沒有工作。我甚至無法理解這個問題背後的邏輯,這對我來說似乎有點奇怪。

我在做什麼基本上是加載項目列表和分配作爲我的列表框的itemsource。

wineFilterListBox.ItemsSource = wines; 

當用戶到達列表的底部,我添加更多的項目(就像爲WP7 Twitter的應用程序)

public ObservableCollection<Wine> wines; 
... 

    if (atBottom) 
    { 
     int Count = page.wineFilterListBox.Items.Count; 
     int end = Count + 10; 
     for (int i = Count; i < end; i++) 
     { 
      page.LoadWineList(Count); 
     } 
    } 
... 

    private void LoadWineList(int Count = 1) 
    { 
    ... 
     wineFilterListBox.Items.Add(wines); 
    } 

回答

9

當您使用ItemSourceItems集合變爲只讀。這聽起來像你不得不將數據添加到集合而不是ListBoxItems屬性。

請參閱MSDN:ItemsControl.ItemSource Property

特別是,本節:

當ItemsSource屬性設置,項目集合由只讀和固定大小。

嘗試添加項目到wines收集直接,因爲您的收藏是一個`的ObservableCollection':

你應該在的ItemsSource設置爲對象實現了 INotifyCollectionChanged接口,以便在變化ItemsControl中將反映收集 。 ObservableCollection(Of T) 類定義了這樣一個對象。

+0

感謝。刪除最後一行做到了。 「wineFilterListBox.Items.Add(wines);」 我嘗試了很多解決方案,我在使用ObservableCollection時錯過了基本。只需添加到葡萄酒列表就足以更新列表框。 –

+0

@BrunoNunes:沒問題!它總是讓我們的小事情:-) –

0

僅供參考,如果你故意不想使用ObservableCollection設置ItemsSource 您可以手動添加WinewineFilterListBox.Items

for (int i = Count; i < 10; i++) 
{ 
    wineFilterListBox.Items.Add(new Wine()); 
} 

這個原因wineFilterListBox.Items不成爲只讀