只读集合c#wp7不支持该操作

时间:2011-12-12 20:35:14

标签: c# .net silverlight windows-phone-7

我试图在用户到达列表框底部时实现一个懒惰的“加载更多”项目,但每当我尝试将新项目添加到列表框时,我得到的结果如下:

“只读集合不支持该操作。”

我已经尝试过几种从论坛到博客的解决方案似乎都没有用。我甚至无法理解这个对我来说有点奇怪的问题背后的逻辑。

我正在做的是基本上加载一个项目列表并指定为我的列表框的项目源。

  wineFilterListBox.ItemsSource = wines;

当用户到达列表底部时,我会添加更多项目(就像wp7的推特应用程序一样)

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);
   }

2 个答案:

答案 0 :(得分:9)

当您使用ItemSource时,Items集合变为只读。听起来您必须将数据添加到集合中,而不是添加到ListBox Items属性。

请参阅MSDN:ItemsControl.ItemSource Property

特别是本节:

  

设置ItemsSource属性后,Items集合将变为只读且固定大小。

尝试直接将该项添加到wines集合,因为您的集合是“ObservableCollection”:

  

您应该将ItemsSource设置为实现该对象的对象   INotifyCollectionChanged接口使集合中的更改   将反映在ItemsControl中。 ObservableCollection(Of T)   class定义了这样一个对象。

答案 1 :(得分:0)

仅供参考,如果您故意不想使用ObservableCollection来设置ItemsSource 您可以手动将Wine添加到wineFilterListBox.Items

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

这会导致wineFilterListBox.Items不能变为只读