2011-12-12 30 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不成为只读